完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
花了一周时间也没把ad7192的程序调通,MCU使用的是STC12C5A60S2模拟SPI,目前的问题低速可以采集,速度高就没有数据发出了,起初怀疑是时序问题,示波器观察输入没啥问题,使用的是连续转换模式,而且还遇到一个见鬼的问题就是低速时,上电复位单片机收不到数据,每次必须按下RESET复位,ADC才有信号发出。下图就是分别上电复位(上)和RST复位(下)的截图,DOUT绿色,DIN黄色,SCLK蓝色。CS一直是低电平,没采集。图中的8个字节分别是写入模式和配置寄存器。从示波器看唯一区别就是DOUT输出的变化,这对write寄存器有影响吗?,目前上图就无法工作。下图就可以。后面附具体程序,求各位赐教。
最后还有一个问题:ad7190和ad7192有啥区别,看datasheet没找出来。目前是拿ad7192调试的,官方给的程序也改成手头单片机的了,还是没有任何反应。 #include"STC12C5A60S2.h" #include"uart.h" #include"Pin.h" ***it CS = Port1; ***it SCLK = Port2; ***it DIN = Port3; ***it DOUT = Port4; void AD7192Delay(unsigned int count) { unsigned int i,j; for(i=0; i for(j=0; j<5000; j++); } void Write8BitToAD7192(unsigned char dat) { unsigned char i; for(i=0; i<8; i++) { SCLK = 0; if(0x80 == (0x80 & dat)) { DIN = 1; } else { DIN = 0; } SCLK = 1; dat <<= 1; } DIN = 1; //UartPrintf("te :n"); } unsigned long Read24BitFromAD7192(void) { unsigned char i; unsigned long readdat = 0; // while(!DOUT); // while(DOUT); for(i=0; i<24; i++) { SCLK = 0; readdat <<= 1; SCLK = 1; if(DOUT) { readdat += 1; } } return readdat; } void AD7192Initial(void) { CS = 0; /* Write8BitToAD7192(0xff); Write8BitToAD7192(0xff); Write8BitToAD7192(0xff); Write8BitToAD7192(0xff); Write8BitToAD7192(0xff);*/ AD7192Delay(10); /*配置寄存器:斩波使能关,通道选择AIN3-AIN4,输入缓冲器开,单极性,增益1*/ Write8BitToAD7192(0x10); Write8BitToAD7192(0x00); Write8BitToAD7192(0x02); Write8BitToAD7192(0x10); Write8BitToAD7192(0x10); Write8BitToAD7192(0x00); Write8BitToAD7192(0x02); Write8BitToAD7192(0x10); // /*模式寄存器:内部零电平校准*/ // Write8BitToAD7192(0x08); // Write8BitToAD7192(0x88); // Write8BitToAD7192(0x0b); // Write8BitToAD7192(0xff); // while(DOUT); // /*模式寄存器:内部满量程校准*/ // Write8BitToAD7192(0x08); // Write8BitToAD7192(0xa8); // Write8BitToAD7192(0x0b); // Write8BitToAD7192(0xff); // while(DOUT); // /*模式寄存器:系统零电平校准*/ // Write8BitToAD7192(0x08); // Write8BitToAD7192(0xc8); // Write8BitToAD7192(0x0b); // Write8BitToAD7192(0xff); // while(DOUT); // /*模式寄存器:系统满量程校准*/ // Write8BitToAD7192(0x08); // Write8BitToAD7192(0xe8); // Write8BitToAD7192(0x0b); // Write8BitToAD7192(0xff); // while(DOUT); /*模式寄存器:连续转换模式,内部时钟,sinc4滤波器,奇偶校验关,单周期转换开,采样率Hz*/ Write8BitToAD7192(0x08); Write8BitToAD7192(0x08); // Write8BitToAD7192(0x0b); //采样率4.7Hz // Write8BitToAD7192(0xff); Write8BitToAD7192(0x08); //采样率960Hz Write8BitToAD7192(0x02); AD7192Delay(5); // Write8BitToAD7192(0x5c); // DIN = 0; AD7192Delay(10); } void main(void) { unsigned long tmp; CS = 0; UartInit(); UartPrintf("test:n"); AD7192Initial(); while(1) { while(!DOUT);UartPrintf("test2:n"); while(DOUT);UartPrintf("test3:n"); Write8BitToAD7192(0x58); tmp = Read24BitFromAD7192(); UartPrintf("%lxn",tmp); UartPrintf(" %0.2fn",tmp*0.24414064-2048000); } } |
|
相关推荐
2个回答
|
|
问题已收到,由于正值假期,工程师会在假期结束后处理您的问题。
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
610 浏览 1 评论
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1300 浏览 2 评论
ADP5092 SYS端口为2.09V,但是REG_OUT为0是什么原因?
1898 浏览 1 评论
ad7193差分输入ain1与ain2差是正值时,读到电压与实际值误差小,但为负值值,误差就变的很大
4238 浏览 2 评论
9000 浏览 1 评论
ADC3442采集,分析数据出现有规则毛刺,请问是哪方面的问题啊?
1426浏览 3评论
AD7190状态寄存器一直是0x80,连续转换模式下RDY不拉低
1646浏览 2评论
1622浏览 2评论
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1301浏览 2评论
214浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 19:58 , Processed in 0.906768 second(s), Total 81, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号