关于ADS8329
想问下ADS8329的 D[15:12]命令寄存器,ADS8329是单通道,是不是获取数据还要发CMR 0X000?
还有那么时序 自动触发和收到触发 是只有CONVST 不一样吗 ?
还有那个Read while sampling 和Read while comverting 有什么区别
表达错了 单通道是0x0000;
手动触发
如果是自动触发,就无需写CMR寄存器,手动触发的话需要写CMR命令。
两种触发方式的区别可参考Table1:
Read while sampling 和Read while converting的区别可直接参考Figure1~Figure4 采样时和转换时的时序。
我想知道 我用示波器 出波形了 为什么读取数据读不了呢 按照时序来写的 难道在配置寄存器有问题吗?还有那个ReadCRF 有啥作用
#include "ADS8329.h"
#include "stdio.h"
// source define--------------------------------------------------------------------
float Verf=3.3f;
// function define--------------------------------------------------------------------
uint16_t ADS8329_Init(void) //Init
{
// ADS8329_CONVST_L();
// BSP_DelayMs(100);
ADS8329_CONVST_H();
ADS8329_CS_L();
ADS8329_CS_H();
// ADS8329_WR_CRF(0xE7BD);
// ADS8329_WR_CRF(ADS8329_CFR_SYS_RESET);//Èí¼þ¸´Î»
// BSP_DelayUs(100);
//
// return 0;
}
/* д¼Ä´æÆ÷ */
void ADS8329_WR_CRF(uint16_t cmd) //дÕý³£
{
ADS8329_CS_L();
BSP_DelayUs(1);
ADS8329_SPIWriteU16(cmd);
BSP_DelayUs(1);
ADS8329_CS_H();
}
/* ¶Á¼Ä´æÆ÷ */
void ADS8329_RD_CRF(uint16_t data)
{
uint16_t RegData=0,Commd=0xd000;
ADS8329_CS_L();
BSP_DelayUs(1);
ADS8329_SPIWriteU16(RegData);
ADS8329_SPIWriteU16(Commd);
BSP_DelayUs(1);
ADS8329_CS_H();
}
//¶ÁÊý¾Ý
static uint16_t ADS8329_RD_DATA(uint16_t channel)
{
// uint16_t ret=0;
ADS8329_WR_CRF(ADS8329_CMD_CHANNEL);
while(!ADS8329_EOC());
ADS8329_CONVST_L();
BSP_DelayUs(1);
ADS8329_CONVST_H();
ADS8329_WR_CRF(0xD000);
while(!ADS8329_EOC());
// return ret;
}
void ADS8329_Handler(void)
{
uint16_t value1,value2;
float adsdata;
ADS8329_Init();
ADS8329_WR_CRF(0xe8ed);
ADS8329_WR_CRF(0xe8ef);
ADS8329_WR_CRF(0xd8ef);
//
// value1=ADS8329_RD_DATA(ADS8329_CMD_CHANNEL);
//
// value2=ADS8329_RD_DATA(ADS8329_CMD_CHANNEL);
adsdata=(((float)value2*Verf)/65536.0f);
UART_Send(EVAL_COM0,"2",1);
printf("%0.3f V\r\n",adsdata); //´òÓ¡µçѹֵ
}