初级会员

- 积分
- 55
- 金钱
- 55
- 注册时间
- 2014-8-11
- 在线时间
- 1 小时
|

楼主 |
发表于 2014-11-26 11:28:13
|
显示全部楼层
回复【7楼】xuande:
---------------------------------
谢谢!现在我弄了一个程序,但是不能正常读出数据,请教一下大家能不能帮忙看看那里出问题了。。。程序如下: (已经调好,是时间问题。谢谢大家。。。。)
/*******************************************************************************
** 文件名称:ad7682.c
** 功 能:
** 修改日志:
********************************************************************************/
#include "adc7682.h"
//#include "includes.h"
static void AD7682IO_INIT(void);
static void AD7682IO_INIT(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
// SPIx_CS_GPIO, SPIx_MOSI_GPIO, SPIx_MISO_GPIO and SPIx_SCK_GPIO  eriph clock enable
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7; //CS,SCLK,DIN
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_6; //DOUT
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
/*******************************************************************************
** 函数名称:void Delay_1us(u16 count)
** 功 能: count为1时延时1us
** 修改日志:
*******************************************************************************/
static void Delay_1us(u16 count)
{
u8 i,j;
for(i=0 ; i<count ;i++)
{
for(j=0; j><32;j ++)
{
__nop();
}
}
}
/******************************************************************************
** 函数名称:u16 AD7682_spi(u8 ch)
** 功 能: reg寄存器内容,data转换数据
** 修改日志:
*******************************************************************************/
u16 AD7682_spi(u8 ch)
{
u16 reg=0;
u16 data=0;
u8 i;
CS_LOW;
SCLK_LOW;
reg = (1<<13)|(7<<10)|(ch<<7)|(1<<6)|(1<<0);
// <<=2; //寄存器只用到了14位,所以要先移出高两位
Delay_1us(10);
for(i=0; i<16; i++)
{
if(reg&0x8000) DIN_HIGH;
else DIN_LOW;
Delay_1us(10);
reg<<=1;
SCLK_HIGH;
Delay_1us(20);
data<<=1;
if(DOUT_READ) data|=1; //(GPIO_ReadInputDataBit(GPIOB,i)
SCLK_LOW;
Delay_1us(20);
}
CS_HIGH;
Delay_1us(20);
return (data);
}
/******************************************************************************
** 函数名称:void AD7682_init(void)
** 功 能:
** 修改日志:
*******************************************************************************/
void AD7682_init(void)
{
// DOUT_DIR_INPUT;
// CS_DIR_OUTPUT;
// DIN_DIR_OUTPUT;
// SCLK_DIR_OUTPUT;
AD7682IO_INIT();
CS_HIGH;
DIN_HIGH;
SCLK_HIGH;
Delay_1us(30);
AD7682_spi(0);
AD7682_spi(0);
}
/******************************************************************************
** 函数名称:float Get_ADC_Value(ch)
** 功 能:采样 ch 选择通道 前三次采集无效
** 修改日志:
*******************************************************************************/
float Get_ADC_Value(u8 ch)
{
u8 i;
float AD_Value1 = 0,AD_Value2 = 0;
AD7682_spi(ch);
AD7682_spi(ch);
for(i = 0; i<10; i++){
AD_Value1 = AD7682_spi(ch);
AD_Value2 += AD_Value1;
}
return (AD_Value2/10);
} |
|