完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
CS1237如何检测芯片是否正常?能否提供示例操作程序?
|
|
相关推荐
1 个讨论
|
|
1、可以读取config寄存器,默认配置0x0C看读上来数值是否一致。
2、参考代码
/* PROJECT NAME: ELECTRONIC SCALE. */ /* CAMPANY : Chipsea technologies Co., LTD. */ /* LANGUAGE : C */ /* EDITOR : */ /* DATE : 2014.07.24 */ /*---------------------------------------------------------------------------- CODE NAME : AD_Communication.C - description - MCU与ADC通讯相关子程序 -----------------------------------------------------------------------------*/ //整个通讯时序的时间必须小于1个数据转换周期 //推荐每个CLK的时间长度:2uS ~ 15uS /*----------------------------------------------------------------------------- Name : F_AD_Clock Function: ADC时序时钟 -----------------------------------------------------------------------------*/ void F_AD_Clock(void) { IO_CLK_AD = 1; F_Delay(); IO_CLK_AD = 0; F_Delay(); } /*----------------------------------------------------------------------------- Name : F_Read_AD_Byte Function: 读3字节AD值 -----------------------------------------------------------------------------*/ void F_Read_AD(void) { _UCHAR i; R_AD0.word = 0; EIC20_EIE0 = 0; //关闭MCU_DAT管脚的外部中断(防止读写时误触发) // while(IO_Data_AD); for(i = 0; i < 24; i++) //发送24个CLK,接收数据 { R_AD0.word <<= 1; F_AD_Clock(); if(IO_Data_AD) { R_AD0.word ++; } } F_AD_Clock(); F_AD_Clock(); F_AD_Clock(); //CLK27,拉高DRDY //如果一个数据转换周期内对ADC进行两次或以上的读写操作,则需要发送46个CLK,而不是27个CLK //(即:发送24个CLK读取数据,然后再发送22个CLK) EIC20_EIE0 = 1; //重新开启MCU_DAT管脚的外部中断 } /*----------------------------------------------------------------------------- Name : F_Rd_AdReg Function: 读取ADC寄存器 -----------------------------------------------------------------------------*/ _UCHAR F_Rd_AdReg(void) { _UCHAR i; union _UCHAR_BIT R_Temp; //---------------------------------- EIC20_EIE0 = 0; //关闭MCU_DAT管脚的外部中断(防止读写时误触发) //---------------------------------- //1 ~ 3:clk1-clk27 //---------------------------------- for(i = 0; i < 27; i++) { F_AD_Clock(); } //---------------------------------- //4:clk28-clk29 //---------------------------------- IO_Data_AD_Dir = 1; //把MCU_Data管脚设为输出 F_AD_Clock(); F_AD_Clock(); //---------------------------------- //5:clk30-clk36(发送读命令) //---------------------------------- R_Temp.byte = 0xAC; //读命令(0x56)左移1位 for(i = 0; i < 7; i ++) { if(R_Temp.bit.b07) //MSB { IO_Data_AD = 1; } else { IO_Data_AD = 0; } R_Temp.byte = R_Temp.byte << 1; F_AD_Clock(); } //---------------------------------- //6:clk37 //---------------------------------- IO_Data_AD_Dir = 0; //把MCU_Data管脚设为输入 F_AD_Clock(); //---------------------------------- //7:clk38-clk45(读取寄存器) //---------------------------------- R_Temp.byte = 0; for(i = 0; i < 8; i++) { R_Temp.byte <<= 1; F_AD_Clock(); if(IO_Data_AD) { R_Temp.byte ++; } } //---------------------------------- //8:clk46 //---------------------------------- F_AD_Clock(); //---------------------------------- EIC20_EIE0 = 1; //重新开启MCU_DAT管脚的外部中断 return R_Temp.byte; } /*----------------------------------------------------------------------------- Name : F_Wr_AdReg Function: 写入ADC寄存器 -----------------------------------------------------------------------------*/ void F_Wr_AdReg(_UCHAR R_AdReg) { _UCHAR i; union _UCHAR_BIT R_Temp; //---------------------------------- EIC20_EIE0 = 0; //关闭MCU_DAT管脚的外部中断(防止读写时误触发) //---------------------------------- //1 ~ 3:clk1-clk27 //---------------------------------- for(i = 0; i < 27; i++) { F_AD_Clock(); } //---------------------------------- //4:clk28-clk29 //---------------------------------- IO_Data_AD_Dir = 1; //把MCU_Data管脚设为输出 F_AD_Clock(); F_AD_Clock(); //---------------------------------- //5:clk30-clk36(发送写命令) //---------------------------------- R_Temp.byte = 0xCA; //写命令(0x65)左移1位 for(i = 0; i < 7; i ++) { if(R_Temp.bit.b07) //MSB { IO_Data_AD = 1; } else { IO_Data_AD = 0; } R_Temp.byte = R_Temp.byte << 1; F_AD_Clock(); } //---------------------------------- //6:clk37 //---------------------------------- F_AD_Clock(); //---------------------------------- //7:clk38-clk45(写入寄存器) //---------------------------------- R_Temp.byte = R_AdReg; for(i = 0; i < 8; i ++) { if(R_Temp.bit.b07) //MSB { IO_Data_AD = 1; } else { IO_Data_AD = 0; } R_Temp.byte = R_Temp.byte << 1; F_AD_Clock(); } //---------------------------------- //8:clk46 //---------------------------------- IO_Data_AD_Dir = 0; //把MCU_Data管脚设为输入 F_AD_Clock(); //---------------------------------- EIC20_EIE0 = 1; //重新开启MCU_DAT管脚的外部中断 } |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
967 浏览 0 评论
CS32L010 Deepsleep 模式下,保留 GPIO/AWK 唤醒,低功耗电流是多少?
603 浏览 0 评论
2661浏览 28评论
2797浏览 27评论
6022浏览 15评论
2123浏览 9评论
761浏览 6评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-5-2 23:22 , Processed in 0.291746 second(s), Total 43, Slave 32 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号