OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3394|回复: 6

关于AD7705数据显示 为什么就是没有数据显示

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2015-11-2
在线时间
0 小时
发表于 2015-11-2 18:57:44 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]#include "main.h" //#include "AD9833.h" //#include "DAC.h" #include "pwm.h" #include "key.h" #include "stm32f10x.h" #include "stm32f10x_spi.h" u16 b; float c; //AD7705.h #ifndef __SPI1_H #define __SPI1_H #define CS_ADC_LOW() GPIO_ResetBits(GPIOA,GPIO_Pin_4) /*片选*/ #define CS_ADC_HIGH() GPIO_SetBits(GPIOA,GPIO_Pin_4) u8 SPIx_ReadWriteByte(u8 TxData); void delay_ms(u16 time); void delay_us(u16 time); void SPIx_Init(void); void AD7705_WriteByte(u8 Dst_Addr); void Init_AD7705(u8 chnanel); u16 GetData7705_CH1(void); u16 GetData7705_CH2(void); #endif /* __SPI1_H */ //AD7705.C //#include "AD7705.h" //#include "stm32f10x.h" /* SPI1_NSS PA4 CS ; SPI1_SCK PA5 CLK ; SPI1_MISO PA6 DOUT ; SPI1_MOSI PA7 DIN ; PA8 DRDY ; */ void SPIx_Init(void) { SPI_InitTypeDef SPI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_SPI1 | RCC_APB2Periph_AFIO, ENABLE ); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;// AdDrdy GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;//PA8配置成上拉输入 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA,GPIO_Pin_8); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;//SPI CS DAC8554 AD7705 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA,GPIO_Pin_4); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP ; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); SPI_Cmd(SPI1, DISABLE); //失能SPI外设 SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //SPI设置为双线双向全双工 SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //设置为主SPI SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //SPI发送接收8位帧结构 SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //时钟悬空为高 SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //数据捕获于第二个时钟沿 SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //内部NSS信号有SSI位控制 SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //波特率预分频值256 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //数据传输从MSB开始 SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC值计算的多项式 SPI_Init(SPI1, &SPI_InitStructure); //SPI寄存器的初始化 SPI_Cmd(SPI1, ENABLE); //使能SPI外设 CS_ADC_LOW(); SPIx_ReadWriteByte(0xff); //启动传输 CS_ADC_HIGH(); } //SPIx 读写一个字节 //TxData:要写入的字节 //返回值:读取到的字节 u8 SPIx_ReadWriteByte(u8 TxData) { u8 retry=0; while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET) //检查指定的SPI标志位设置与否:发送缓存空标志位 { retry++; if(retry>200)return 0; } SPI_I2S_SendData(SPI1, TxData); //发送数据 retry=0; while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET) { retry++; if(retry>200)return 0; } return SPI_I2S_ReceiveData(SPI1); //返回接收到的数据 } //写数据 void AD7705_WriteByte(u8 Dst_Addr) { CS_ADC_LOW(); //使能器件 delay_us(20); SPIx_ReadWriteByte(Dst_Addr); delay_us(100); CS_ADC_HIGH();//失能 } /********AD7705初始化函数***********/ void Init_AD7705(u8 chnanel) { u8 i; for(i=0;i<100;i++)/*多于连续32个DIN=1使串口复位*/ { AD7705_WriteByte(0xff);//持续DIN高电平写操作,恢复AD7705接口 } delay_ms(1); switch(chnanel) { case 1: AD7705_WriteByte(0x20); /* 写通讯寄存器选中ch1*/ AD7705_WriteByte(0x04);//0x04 /* 1MHz时钟,200Hz数据更新速率*/ AD7705_WriteByte(0x10); /*选择设置寄存器,使用chnanel 1*/ AD7705_WriteByte(0x44); //写设置寄存器,设置成单极性,无缓冲,增益为1,滤波器工作,自校准 break; case 2: AD7705_WriteByte(0x21); /* 写通讯寄存器选中ch2 */ AD7705_WriteByte(0x04); /* 1MHz时钟,200Hz数据更新速率*/ AD7705_WriteByte(0x11); /*选择设置寄存器,使用chnane 2*/ AD7705_WriteByte(0x44); //写设置寄存器,设置成单极性,无缓冲,增益为1,滤波器工作,自校准 break; default: break; } } /* 读AD7705转换数据输入通道channel */ u16 GetData7705_CH1(void) { u16 temp1 = 0; u16 DataL = 0; u16 DataH = 0; Init_AD7705(1); //初始化通道1 delay_ms(1); AD7705_WriteByte(0x38); //选中CH1数据寄存器读 while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8)==1) //等待数据准备好 { } CS_ADC_LOW(); //使能器件 delay_us(20); DataH = SPIx_ReadWriteByte(0xff); DataL = SPIx_ReadWriteByte(0xff); delay_us(200); CS_ADC_HIGH(); //片选取消 DataH = DataH << 8; temp1 = DataH | DataL; return temp1; } /* 读AD7705转换数据输入通道channe2 u16 GetData7705_CH2(void) { u16 temp2 = 0; u16 DataL = 0; u16 DataH = 0; Init_AD7705(2); //初始化通道2 delay_ms(1); AD7705_WriteByte(0x39); //选中CH2数据寄存器读 while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8)==1) //等待数据准备好 { } CS_ADC_LOW(); //使能器件 delay_us(20); DataH = SPIx_ReadWriteByte(0xff); DataL = SPIx_ReadWriteByte(0xff); delay_us(200); CS_ADC_HIGH(); //片选取消 DataH = DataH << 8; temp2 = DataH | DataL; return temp2; } */ void delay_us(u16 time) { u16 i=0; while(time--) { i=10; while(i--); } } void delay_ms(u16 time) { u16 i=0; while(time--) { i=12000; while(i--); } } /////////////////主函数////////////////主函数//////////////主函数////////////////////// int main(void) { // u8 kai=0,guan=0,qidong=1,i=2; SysTick_Init(); //初始化系统滴答定时器 LED_GPIO_Config(); //LED端口初始化 LCDGPIO_Configuration();//LCD初始化 Key_GPIO_Config(); PWM_Init(); SPIx_Init(); Init_AD7705(1); // ADC1_Init(); // ADC_LocalValue =(float) ADC_ConvertedValue/4096*3.3; // 读取转换的 AD 值 // AD9833_Output(1000000); // LCDmain(); LCDDisplay(0, 0,"电压:"); Dis_float16(1,0,c); LCDDisplay(1, 4, "V"); // GPIO_ResetBits(GPIOE,GPIO_Pin_14); // GPIO_ResetBits(GPIOE,GPIO_Pin_15); GPIO_SetBits(GPIOE,GPIO_Pin_14); GPIO_SetBits(GPIOE,GPIO_Pin_15); //GPIO_SetBits(GPIOD,GPIO_Pin_3); while(1) { Init_AD7705(1); b = GetData7705_CH1(); c = b*2.5/65535; Dis_float16(1,0,c); } } [/mw_shl_code]

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-11-2 21:24:53 | 显示全部楼层
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-11-2 22:35:51 | 显示全部楼层
建议楼主用软件模拟spi与AD7705通讯
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2015-11-2
在线时间
0 小时
 楼主| 发表于 2015-11-3 16:07:21 | 显示全部楼层
回复【3楼】八度空间:
---------------------------------
我是新手 请问具体怎么操作 还有就是我的AD7705为什么不能显示采集数据
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-11-3 19:27:45 | 显示全部楼层
回复【4楼】liangliang8881:
---------------------------------
我试过硬件SPI不行的
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2015-11-2
在线时间
0 小时
 楼主| 发表于 2015-11-4 10:53:57 | 显示全部楼层
回复【5楼】八度空间:
---------------------------------
好的  谢谢
回复

使用道具 举报

1

主题

22

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
220
金钱
220
注册时间
2015-3-17
在线时间
37 小时
发表于 2015-12-28 08:18:23 | 显示全部楼层
为什么用IIC硬件不行,用SPI还是不行,我的理解,硬件实现的不是应该更稳定么。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 18:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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