ADS7822的使用

来源:互联网 发布:网络销售外包合同 编辑:程序博客网 时间:2024/06/06 17:38
今天第一次接触ADS7822芯片,遇到了个小问题,芯片焊好后可以读数,因为数据输出端口DOUT会按照时序输出一个无效的低电平以表示数据开始传输,但读出来的数据始终是0,折腾了半天,发现是DCLOCK第一次下降沿出现时间的问题

这里写图片描述
ADS7822的时序图

这里写图片描述
时序图相关的时间约束

仔细看DCLOCK的tcsd时间约束,表中要求tcsd应小于0,因为tcsd的最大值为0,所以,当CS置0之前,应先把DCLOCK置为0,才能正常工作,哎,涨教训了,以后要认真仔细啊。

附上代码:

/***头文件代码******/#ifndef __ADS7822E_H#define __ADS7822E_H#include "sys.h"#define ADS_DCLOCK          PAout(2)#define ADS_DOUT            PAin(1)#define ADS_CS              PAout(0)#define ADS_DELAY           (0)#define ADS_DELAY_US        (5)extern void ADS_Init(void);extern unsigned int ADS_get_value(void);#endif
/***源程序代码*****/#include "ADS7822E.h"#include "delay.h"void ADS_Init(void){    RCC->APB2ENR|=1<<2;    GPIOA->CRL&=0xFFFFF000;    GPIOA->CRL|=0x00000383;    GPIOA->ODR|=3;}unsigned int ADS_get_value(void){    unsigned int value=0;    unsigned int i;    ADS_DCLOCK=0;/*DCLOCK一定要在CS前置为0*/    ADS_CS=0;    #if ADS_DELAY==1        delay_us(ADS_DELAY_US);    #endif    while(ADS_DOUT)    {        ADS_DCLOCK=1;        ADS_DCLOCK=0;        #if ADS_DELAY==1            delay_us(ADS_DELAY_US);        #endif    }    for(i=12;i>0;i--)    {        ADS_DCLOCK=1;        ADS_DCLOCK=0;        #if ADS_DELAY==1            delay_us(ADS_DELAY_US);        #endif        value<<=1;        value|=ADS_DOUT;    }    ADS_DCLOCK=1;    ADS_CS=1;    return value;}

另外说一句,这个编辑器怎么这么不好用啊

原创粉丝点击