#define P_ADS7822_CS P1_7 //Port of ADS7822 CS
#define P_ADS7822_CLK P1_6 //Port of ADS7822 Clock
#define P_ADS7822_Dout P1_4 //Port of ADS7822 Dout
int16 ReadSpi_ADS7822(void)
{
int i; //定义数据读取次数变量
int j; //定义采样数据暂存单元
int ADS7822_Value; //定义采样数据存储单元
P_ADS7822_CLK=0; //addclock为低电平
P_ADS7822_CS=0; //启动A/D转换
P_ADS7822_CLK=1; //送3个脉冲取样
P_ADS7822_CLK=0;
P_ADS7822_CLK=1;
P_ADS7822_CLK=0;
P_ADS7822_CLK=1;
//P_ADS7822_Dout=1;
//ADS7822_Value=0;
/读取采样数据
for(i=11;i>=0;i–)
{
//送读取脉冲
P_ADS7822_CLK=0;
P_ADS7822_CLK=1;
/读取数据
j=(int)(P_ADS7822_Dout);
//数据移位后与前面数据相或
ADS7822_Value=ADS7822_Value|(j<<i);
}
//一次采样完成,片选置为高电平
P_ADS7822_CS=1;
//Ref = 2.5
//VDC = Dout * 2.5 / 4096
//ADS7822_Value = ADS7822_Value * 0x05 / 0x1FFF; return ADS7822_Value;
}
程序是参考网上的例子,按照时序图做的,MCU是CC2530,但是ADS7822_Value的值总是0xFFF,不知道哪位能指点一下。
//P_ADS7822_Dout=1;
//ADS7822_Value=0;
这两句启用与否,都对上述情况无影响。
Felix Wei:
Hi,
请确定一下你所用的MCU是否有SPI外设,如果有SPI外设,建议使用该外设来和ADC通讯。
对于ADC,请查阅datasheet确认SPI命令表,你例程中需要读取的寄存器好像并没有指定
Luke Sun:
hi yongsheng wang,
代码部分问题建议你移步MCU区讨论。另外你可以在示波器上先验证一下MCU和ADC接口中的波形是否实际产生。
HaiTao Li:
回复 Felix Wei:
上面好像是想用模拟的方式实现SPI
HaiTao Li:
回复 HaiTao Li:
CC2530的USART是有SPI功能的,可以通过软件设置实现,USER GRIDE的USART那一章里有。不过软件模拟方式实现三线的SPI与ADS7822进行通讯,确实没做过,帮不了你。