这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » Microchip » STC系列IAP15W413AS单片机,AD CS1231芯片

共5条 1/1 1 跳转至

STC系列IAP15W413AS单片机,AD CS1231芯片

菜鸟
2015-04-23 14:11:42     打赏

小弟最近在用IAP15W413AS这个单片机和AD芯片CS1231做一个小的称重处理项目。调试一段时间后发现,AD内码值以及线性变化也挺好的。但是,在读到的AD数值中间会穿插大量的0值,也就是内码会突变为0 。纠结好久,搞不懂为什么。有没有大神帮忙看下,谢谢。

下面附上AD部分电路以及AD驱动程序。

void Delay(unsigned int n) {
	unsigned int i, j;
	for(i = 0; i < n; i++){
		for(j = 0; j < 200; j++){

		}
	}
}

/*
	时钟脉冲
*/
void CS1231_Clk(void)
{
	IO_ADC_SCLK = 1;
	Delay(10);
 // _nop_();_nop_();_nop_();
	IO_ADC_SCLK = 0;
  //_nop_();_nop_();_nop_();
	//
}

/*
	从CS1231读取1字节的数据,返回无符号的rdata
*/
unsigned char Read_byte_adcIC (void) {
	int i;
	unsigned char rdata = 0;            //初始化返回值为0
	
	for (i = 0; i < 8; i++) {
		rdata <<= 1;          //返回值左移1位
		CS1231_Clk();        //上升沿接收数据,下降沿更新数据
		if (IO_ADC_DDAT) {
			rdata |= 1;        //若数据线上数据为1,则返回值加1
		} else {
			
		}
    Delay(10);
	}
	
	return(rdata);
} 

/*
	从CS1231读取AD值数据,返回4字节的长整型数据Rdata
*/


signed long adcResult = 0;
signed long Get_AD_adcIC(){
	unsigned int i;
	long Rdata = 0;
  
  //while(IO_ADC_DDAT);				//读数据前确定数据线为低
	IO_ADC_SCLK = 0;      		//此语句可确保在读AD值之前SCLK为低电平
  
 
  *((unsigned char *)(&adcResult)+0) = Read_byte_adcIC();
  *((unsigned char *)(&adcResult)+1) = Read_byte_adcIC();
  *((unsigned char *)(&adcResult)+2) = Read_byte_adcIC();
  *((unsigned char *)(&adcResult)+3) = 0; //Read_byte_adcIC();
  
  
  Delay(1);
	CS1231_Clk();          //向CS1231发送结束标志位	

  adcResult = adcResult / 65536;
	return(adcResult);
}

/*
	cs1231初始化
*/
void Init_adcIC(void)      //CS1231初始化
{
// 	PDWN = 0;
// 	Delay(2);
 	PDWN = 1;            //power down (低电平有效)
	IO_ADC_SCLK = 0;     // SCLK长时间表为高电平时,AD会进入待机模式
	while(IO_ADC_DDAT);  //等待到一个AD值,表示AD工作正常
	
}


 

AD部分电路



院士
2015-04-23 14:31:42     打赏
2楼

编辑器有代码功能,干吗不用?


这看着多累啊


工程师
2015-04-26 00:13:22     打赏
3楼
太赞了,学习了

工程师
2017-04-10 12:32:54     打赏
4楼
我也遇到类似问题(AD输出不稳定中间夹杂突变数),我也是用的STC单片机,单用TM7711没有此现象,CS1231的应用笔记有提到时钟信号必须纯净,否则会出错,不知是不是这个问题,也没去验证。

菜鸟
2017-06-28 11:55:39     打赏
5楼
IO_ADC_DDAT ,IO_ADC_SCLK这两句怎么定义呢?

共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]