完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
ADUC7061是有些问题的,比如通过JLINK调试,STEP BY STEP模式下,读取的ADC1DAT数据是16位而不是24位,如果改用某个特定版本的ULINK,则可以显示24位。这个是仿真调试工具和芯片接口上出了问题。但无论如何,归类为BUG是没有问题的。我不想讨论这个细节,我只是说ADUC7061其实也有很多BUG。不要全部归责到用户使用是否熟悉上。
ADC1可以采集通道1~9,1~5是专用通道,6~9是和SPI、I2C复用的。 用ADC去采集1~5通道的数据,是没有问题的。这个确实也是比较简单的。 但我用同样的代码去采集ADC8通道,就问题大了。 当然,会把芯片脚的复用功能切换到模拟上,即把初始的GPIO功能改到模拟输入。然后读取ADC值。 按DATAHEET操作,不行。 我的板子是ADC4和ADC8连接在一起的,ADC5接地AGND,单端模式,读ADC4没有问题,正确且正常,但读ADC8的数据,读到的值在0x5fexx~0x607xx之间变化,换个芯片,也是这样。 我个人认为,ADI芯片的配置代码,可能存在一些BUG,导致配置可能需要特定的顺序或者特定的要求,理解为BUG的意思是:至少DATASHEET里没有说明,用户无法猜测到。 通道4~通道8的差别是这样的。就一句差别: ADC1CON = 0x8004 | 0x0480;//ch 8 //ADC1CON = 0x800c | 0x0300;//ch 4 端口的配置是这样的: GP0CON0 = 0x00000000; //p0.0~p0.4 gpio GP0PAR = 0x0f; //01110 GP0DAT = 0x10100000; GP0KEY1 = 0x7; GP0CON1 = 0x1; // adc GP0KEY2 = 0x13; 我还试过,GP0CON1 修改后再配置GP0复用,以测试是否有顺序要求,但效果不对。 为了检测芯片脚是否短路,我使用过ADC8复用的SPI功能,SPI用来驱动显示屏,工作正常(测ADC8的时候,显示屏当然会取下)。 这个简单的功能,验证了好几天,实在想不到有什么遗漏的地方可以测试,只能归结为芯片BUG。 看看有没有哪位师傅,有兴趣帮一下。谢谢 (注:这个芯片用五六年了,不会有低级错误,估计是芯片BUG,我以前处理过好几BUG,就这个芯片的) 附代码: #include "ResGf.h" int main() { volatile signed long s; signed char N = -1; char Err = 0; float fN = 0; PLLKEY1 = 0xaa; PLLCON = 0x00; PLLKEY2 = 0x55; POWKEY1 = 0x1; POWCON0 = 0x38; // Set core to max CPU speed of 10.24Mhz POWKEY2 = 0xF4; POWKEY3 = 0x76; POWCON1 = 0x024; POWKEY4 = 0xB1; DACCON = 0x0013; DACDAT = 0x04ff0000; while(1) { ADCCFG = 0x84; ADCFLT = 0x8083; GP0CON0 = 0x00000000; //p0.0~p0.4 gpio GP0PAR = 0x0f; //01110 GP0DAT = 0x10100000; GP0KEY1 = 0x7; GP0CON1 = 0x1; // adc GP0KEY2 = 0x13; ADC0CON = 0; ADC1CON = 0x878c;; s = ADCSTA; s = ADC0DAT; s = ADC1DAT; ////////// ADCMDE = 0x83; //// ADC1CON = 0x8004 | 0x0480;//ch 8 //ADC1CON = 0x800c | 0x0300;//ch 4 s = ADC1DAT; s = ADCSTA; ADCMDE = 0x82; do { s = ADCSTA; if (s 0x2000) //adc1cerr { Err |= 1; //over range } } while(!(s 0x2)); s = ADC1DAT; ADCMDE = 0x83; //3. exit adc ADCMDE = 0x83; //idle ADCFLT = 0x80ff; ADC1CON = 0x78c; //internally shorted GP0CON0 = 0x00001011; //back to spi GP0PAR = 0x04; GP0DAT = 0x10100000; GP0KEY1 = 0x7; GP0CON1 = 0x0; // exit adc GP0KEY2 = 0x13; } } |
|
相关推荐
1个回答
|
|
ADUC7061的ADC采集不到数据可能有以下几个原因:
1. 芯片本身有BUG:ADUC7061可能存在一些硬件或软件方面的问题,导致ADC采集不到数据或数据不正确。例如,某个版本的仿真调试工具可能无法正确读取ADC数据。 2. 接口设置问题:ADC8通道可能与其他模块的接口复用,需要正确配置相关寄存器和引脚功能才能使用ADC8通道。确保相关引脚设置正确。 3. 电源问题:ADC需要稳定的电源供应,如果电源电压不稳定或存在噪声,可能会影响ADC的采集精度和稳定性。 4. ADC配置错误:可能是ADC的配置寄存器设置不正确,导致ADC无法工作。确保ADC的配置正确。 5. 时钟配置问题:ADC需要正确的时钟配置才能正常工作,确保时钟配置正确。 6. 信号源问题:可能是要采集的信号源没有正确连接或存在问题,导致ADC无法采集到有效数据。 需要仔细检查以上可能的原因,逐一排查并解决问题。如果仍然无法解决,可能需要参考ADUC7061的数据手册或与芯片厂商联系,以获取更具体的支持和解决方案。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
《DNESP32S3使用指南-IDF版_V1.6》第三十章 DHT11数字温湿度传感器
122 浏览 0 评论
565 浏览 0 评论
【敏矽微ME32G070开发板免费体验】之原厂2812测试例程解析
772 浏览 0 评论
948 浏览 2 评论
《DNESP32S3使用指南-IDF版_V1.6》第二十六章 INFRARED_RECEPTION实验
658 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12041 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 17:33 , Processed in 1.396536 second(s), Total 75, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号