请选择 进入手机版 | 继续访问电脑版

硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1171|回复: 3
收起左侧

AD7606采集的数据为0

[复制链接]

1

主题

0

回帖

3

积分

新手上路

积分
3
发表于 2022-6-17 18:06:29 | 显示全部楼层 |阅读模式
我想问一下各位关于AD7606这个芯片的问题,我画的板子用的是GPIOC接的AD7606的整个DB引脚,写的驱动每次读到的数据都为0,关于这点有没有什么好的建议?


#define READ_AD_DATA   GPIO_ReadInputData(GPIOC);

#define OS0_1()         GPIO_SetBits(GPIOB, GPIO_Pin_6);
#define OS0_0()         GPIO_ResetBits(GPIOB, GPIO_Pin_6);
#define OS1_1()         GPIO_SetBits(GPIOB, GPIO_Pin_5);
#define OS1_0()         GPIO_ResetBits(GPIOB, GPIO_Pin_5);
#define OS2_1()         GPIO_SetBits(GPIOB, GPIO_Pin_4);
#define OS2_0()         GPIO_ResetBits(GPIOB, GPIO_Pin_4);

#define AD7606_CS_1           GPIO_SetBits(GPIOB, GPIO_Pin_3);
#define AD7606_CS_0           GPIO_ResetBits(GPIOB, GPIO_Pin_3);
#define AD7606_RD_1           GPIO_SetBits(GPIOD, GPIO_Pin_2);
#define AD7606_RD_0           GPIO_ResetBits(GPIOD, GPIO_Pin_2);


#define AD7606_RESET_1        GPIO_SetBits(GPIOA, GPIO_Pin_13);
#define AD7606_RESET_0        GPIO_ResetBits(GPIOA, GPIO_Pin_13);
#define AD7606_CONVST_1       GPIO_SetBits(GPIOA, GPIO_Pin_8 & GPIO_Pin_11);
#define AD7606_CONVST_0       GPIO_ResetBits(GPIOA, GPIO_Pin_8 & GPIO_Pin_11);

#define AD7606_BUSY_STATE        GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_15)
#define AD7606_FRSTDATA_STATE    GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_14)




void AD7606_GPIOConfig(void)
{
   GPIO_InitTypeDef GPIO_InitStructure;

   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE);
   GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);

   //----------------------------- AD7606 DATA GPIO ------------------------------
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
   GPIO_Init(GPIOC, &GPIO_InitStructure);
   //------------------------------------ End ------------------------------------

   //ADCS->PB3, OS0->PB7, OS1->PB6, OS2->PB5
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOB, &GPIO_InitStructure);

   //ADREAD->PD2
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOD, &GPIO_InitStructure);

   // ADFIRST->PA14, COVA->PA8, COVB->PA11, ADRESET->PA13
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_11 | GPIO_Pin_13 | GPIO_Pin_14;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOA, &GPIO_InitStructure);

   //ADRESET->PA13, ADBUSY->PA15
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
   GPIO_Init(GPIOA, &GPIO_InitStructure);
}

//sampling rate 200kSPS
void AD7606_SetOS(uint8_t _ucOS)
{
   g_tAD7606.ucOS = _ucOS;
   switch (_ucOS)
   {
      case AD_OS_X2:
         OS2_0();
         OS1_0();
         OS0_1();
         break;

      case AD_OS_X4:
         OS2_0();
         OS1_1();
         OS0_0();
         break;

      case AD_OS_X8:
         OS2_0();
         OS1_1();
         OS0_1();
         break;

      case AD_OS_X16:
         OS2_1();
         OS1_0();
         OS0_0();
         break;

      case AD_OS_X32:
         OS2_1();
         OS1_0();
         OS0_1();
         break;

      case AD_OS_X64:
         OS2_1();
         OS1_1();
         OS0_0();
         break;

      case AD_OS_NO:
      default:
         g_tAD7606.ucOS = AD_OS_NO;
         OS2_0();
         OS1_0();
         OS0_0();
         break;
   }
}

void AD7606Initialization(void)
{
   delay_ms(1);
   AD7606_RESET_0
   AD7606_SetOS(AD_OS_NO);
   AD7606_CS_1
   AD7606_CONVST_1
   AD7606_RD_1
   delay_ms(1);
}


void AD7606Reset(void)
{
   AD7606_RESET_1;
   delay_us(1);
   AD7606_RESET_0;
   delay_us(1);
}

void AD7606ReadSample(void)
{
   char data[30];

   //开启转换
   AD7606_CONVST_0
   __NOP();  
   AD7606_CONVST_1;
   __NOP();

   //当前数据状态 低电平可读取新数据 高电平可读取上次结果
   while(AD7606_BUSY_STATE)
   {
      //高电平期间读取数据,过采样开启可用

   }
   AD7606_CS_0
   __NOP();
   //BUSY低电平读取新数据
   AD7606_RD_0
   __NOP();

   ad_value[0]=READ_AD_DATA;
   AD7606_RD_1;
   __NOP();
   AD7606_RD_0;
   __NOP();

   ad_value[1] = READ_AD_DATA;
   AD7606_RD_1;
   __NOP();
   AD7606_RD_0;
   __NOP();

   ad_value[2] = READ_AD_DATA;
   AD7606_RD_1;
   __NOP();  
   AD7606_RD_0;
   __NOP();

   ad_value[3] = READ_AD_DATA;
   AD7606_RD_1;
   __NOP();
   AD7606_RD_0;
   __NOP();

   ad_value[4] = READ_AD_DATA;
   AD7606_RD_1;
   __NOP();
   AD7606_RD_0;
   __NOP();

   ad_value[5] = READ_AD_DATA;
   AD7606_RD_1;
   __NOP();  
   AD7606_RD_0;
   __NOP();

   ad_value[6] = READ_AD_DATA;
   AD7606_RD_1;
   __NOP();
   AD7606_RD_0;
   __NOP();

   ad_value[7] = READ_AD_DATA;
   AD7606_RD_1;
}







回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105917
QQ
发表于 2022-6-19 10:35:55 | 显示全部楼层
AD7606一定要5V供电,很重要。
别的地方倒是没看出问题来。
回复

使用道具 举报

1

主题

3

回帖

6

积分

新手上路

积分
6
发表于 2022-8-31 16:11:55 | 显示全部楼层
eric2013 发表于 2022-6-19 10:35
AD7606一定要5V供电,很重要。
别的地方倒是没看出问题来。

您好,所以这个用单片机直接供电不行是吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105917
QQ
发表于 2022-9-1 00:26:44 | 显示全部楼层
欧尔佳 发表于 2022-8-31 16:11
您好,所以这个用单片机直接供电不行是吗

一定要保证5V供电即可。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-3-29 03:08 , Processed in 0.159621 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表