完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
用的ADC1的4通道,看着例程写的,基本没什么改变,但是读出来的数据貌似是垃圾数。我也试了主ADC,也不行,是我的程序那个地方需要注意吗??信号电压是0.22V,读出来的数据总是
808117左右,用的片内基准。我就是对地短路这个数也不会变化。其它串口定时器什么的程序都没问题,就这个ADC很奇怪。大佬们有类似的问题吗?用的keil5。 #include "main.h" unsigned int runtime = 0; unsigned char newADCdata; #include int main(void) { /******************修改,以p0.4,ir为例*******************/ newADCdata = 0; runtime = 0; POWKEY1 = 0x1; POWCON0 = 0x78; // Set core to max CPU speed of 10.24Mhz POWKEY2 = 0xF4; GP0DAT = BIT17+BIT25+BIT28;//DAT功能设置,比如输入输出,24~31位配置 GP0SET = BIT16; //GPxSET为端口x的数据设置寄存器 // Initilize Timer 1 in Periodic mode with timeout period of 1 Second T1LD = 0x2800; //10240 1ms T1CON = 0x6C0; // 110 1100 0000,Periodic mode, enable timer, 10.24M clock/1,增 IRQCONE = BIT1; // Rising edge FIQEN = BIT4 + BIT13; // Enable Timer 1 IRQ UARTInit(); IRQEN = BIT11; // Enable UART interrupt // Configure ADC1 for continuous conversions, 1khz, ADC4 input ADCMSKI = BIT1; // Enable ADC1 result ready interrupt source ADCFLT = 0x7; // Chop off, 1Khz samping rate, SF = 7. No averaging ADCMDE = BIT0; // Continuous Conversion mode, Normal mode ADC1CON = BIT8 + BIT9 // ADC1 input channel 4 in Single-Ended mode. + BIT15; // Auxiliary-ADC Enabled // Also, Int reference, ADCCFG = 0; IRQEN = BIT10+BIT11; // Enable ADC1 and UART interrupts printf("初始化成功!rn"); while(1) { if (newADCdata == 1) // Is there an ADC0 result ready for UART transmission? { newADCdata = 0; printf("NTCt%lu rn",lADC0_Thermocouple); //2^24=16777216 } if(runtime%1000 < 30) { printf ("runtime = %drn",runtime/1000 ); GP0DAT ^= BIT17; // Toggle LED on Evaluation board (P0.4) // printf("ADC值为%d rn",newADCdata); } } } void IRQ_Handler(void) __irq { unsigned long IRQSTATUS = 0; IRQSTATUS = IRQSTA; // Read off IRQSTA register if ((IRQSTATUS BIT10) == BIT10) //If ADC0 interrupt source { // if (newADCdata==0) // { lADC0_Thermocouple = ADC0DAT; lADC0_Thermocouple = ADC1DAT; //读从ADC,要先读主ADC的数据 newADCdata = 1; // } } unsigned char ucCOMIID0 = 0; if ((IRQSTATUS BIT11) == BIT11) //UART interrupt source { ucCOMIID0 = COMIID0; if ((ucCOMIID0 0x2) == 0x2) // Transmit buffer empty 发送缓冲区为空 { ucTxBufferEmpty = 1; } if ((ucCOMIID0 0x4) == 0x4) // Receive byte { ucComRx = COMRX; printf("%drn",ucComRx); } } } void FIQ_Handler(void) __irq { unsigned long FIQSTATUS = 0; FIQSTATUS = FIQSTA; // Read off IRQSTA register if ((FIQSTATUS BIT4) == BIT4) //Timer 1 interrupt source { // runtime++; T1CLRI = 0x55; // Clear the currently active Timer0 Irq } } void Delay_ms(u32 time) { u32 tick = runtime; while(runtime < (tick+time)); } |
|
相关推荐
1个回答
|
|
根据提供的代码,有几个可能导致ADC读取数据错误的原因:
1. ADC引脚配置错误:请确保你正确地配置了ADC引脚,以使其连接到正确的电路和信号上。 2. ADC精度设置错误:请检查你的代码是否正确设置了ADC的精度,以确保它与你的应用需求匹配。确保你选择了正确的ADC精度配置(例如12位或10位)。 3. ADC参考电压设置错误:请确认你正确地设置了ADC参考电压,以便将输入电压值转换为正确的数字。 4. ADC时钟配置错误:请确保你正确地配置了ADC的时钟,以使其工作在预期的频率范围内。 5. ADC采样时间设置错误:请检查你的代码,查看是否正确设置了ADC的采样时间,以确保能够准确地采样到输入信号。 如果你已经检查了以上可能的问题,并且你的代码还是无法正确读取ADC数据,你可以尝试以下解决方法: 1. 检查你的硬件连接:确保ADC引脚正确连接到电路和信号。 2. 检查你的代码:仔细检查你的代码,确认你正确配置了ADC的参数,包括精度、参考电压、时钟和采样时间。 3. 调试模式:在调试模式下运行代码,使用调试器逐步执行你的代码,并在每个ADC读取操作之后检查相关寄存器的值,以确保其正确设置。 如果仍然无法解决问题,你可以尝试在论坛或社区中寻求帮助,或者咨询相关厂商的技术支持。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
195 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-shell编程入门之提取字符并设置rtc时间
488 浏览 0 评论
使用LIS2DW12TR加速度传感器可以计算物体重力方向运动的距离吗
671 浏览 1 评论
【敏矽微ME32G070开发板免费体验】介绍、环境搭建、工程测试
382 浏览 0 评论
敏矽微ME32G070开发板开发资料(规格书、库和例程、原理图)
1492 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11939 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-13 20:48 , Processed in 1.158803 second(s), Total 76, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号