完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我使用的MCU为ADuC7060,使用ADC2通道,主ADC,单端工作模式,使用外部基准电压2.4V,外部基准电压接在VREF+/VREF-上。
出现的问题: 1.当ADC2输入的模拟电压达到1.2V时,ADC0DAT寄存器的值就满了,达到了0xFFFFFF,这显然与我的初衷不一致,按理说当ADC输入的模拟电压达到2.4V时,ADC0DAT寄存器的值才能到0xFFFFFF。看起来似乎外部基准电压2.4V未起作用。 2.我还想问一下,当我的外部基准电压接2.4V时,ADC的输入能否输入0V到2.4V? 3.ADC0CON寄存器的12位HIGHEXTREF0的解释“当ADC0的外部基准电压高于1.35V时,必须将该位置1.这样,可以将基准电压源二分频”,解释中的将基准电压二分频是什么意思啊?难道是说基准电压超过1.35V后,若将该位置1,则实际基准电压只有外部基准电压的一半,即ADC的输入电压不能超过1.2V? 下面附上我的程序: #include #include "stdio.h" #include "string.h" #include "user/bit.h" unsigned char szTemp[16] = ""; // Used to store ADC result before printing to UART volatile unsigned long ulADC0Result = 0; // Variable that ADC0DAT is read into in ADC0 IRQ //函数声明 void ADCInit(void); void UARTInit(void); void Delay(int a); float CodeToAV(unsigned long ulCode,int iPGA,float fVref); /****************************************************************************** 函数名 : int main(void) 描述 : 主函数 输入 : void 返回 : NONE *******************************************************************************/ int main(void) { unsigned char i = 0; unsigned char nLen = 0; POWKEY1 = 0x1; POWCON0 = 0x78; // Set core to max CPU speed of 10.24Mhz POWKEY2 = 0xF4; UARTInit(); ADCInit(); IRQEN = BIT10 + BIT11; // Enable ADC and UART interrupts while (1) { } } /****************************************************************************** 函数名 : void IRQ_Handler(void) __irq 描述 : IRQ中断服务程序 输入 : void 返回 : void *******************************************************************************/ void IRQ_Handler(void) __irq { unsigned long IRQSTATUS = 0; unsigned char ucCOMIID0 = 0; IRQSTATUS = IRQSTA; // Read off IRQSTA register if ((IRQSTATUS BIT11) == BIT11) //UART interrupt source { ucCOMIID0 = COMIID0; if ((ucCOMIID0 0x2) == 0x2) // Transmit buffer empty { } } if ((IRQSTATUS BIT10) == BIT10) //If ADC0 interrupt source { ulADC0Result = ADC0DAT; // Read ADC0 conversion result } } /****************************************************************************** 函数名 : void ADCInit(void) 描述 : 初始化ADuC7060的ADC的ADC2通道。 输入 : void 返回 : void *******************************************************************************/ void ADCInit(void) { // // 配置ADC2通道连续转换模式,采样速率4Hz,单端工作模式,使用主ADC // ADCMSKI = BIT0; // Enable 主ADC result ready interrupt source ADCFLT = 0xFF1F; // Chop on, Averaging, AF=63, SF=31, 4Hz ADCCFG = 0; ADC0CON = BIT4 + //使用外部基准电压输入(VREF+/VREF-)2.4V,主ADC增益为1 BIT7 + BIT8 + // ADC2/ADC5(单端模式)。 BIT10 + // Unipolar ADC output BIT12 + //ADC0的外部基准电压为2.4V高于1.35V。 BIT15; // Enable Primary_ADC. ADCMDE = BIT0 + BIT4 + BIT7; // continuous conversions } /****************************************************************************** 函数名 : void UARTInit(void) 描述 : 初始化ADuC7061的主UART,9600-8-N 输入 : void 返回 : void *******************************************************************************/ void UARTInit(void) { // Initialize the UART for 9600-8-N GP1CON = BIT0 + BIT4; // Select UART functionality for P1.0/P1.1 COMCON0 = BIT7; // Enable access to COMDIV registers COMDIV0 = 0x21; // Set baud rate to 9600. COMDIV1 = 0x00; //COMDIV2 = 0x21 + BIT11; // Enable fractional divider for more accurate baud rate setting COMCON0 = BIT0 + BIT1 + BIT2; COMIEN0 = BIT0 + BIT1; // Enable UART interrupts when Rx full and Tx buffer empty. } /****************************************************************************** 函数名 : float CodeToAV(unsigned long ulCode,int iPGA,float fVref) 描述 : 单端模式下将ADuC7060的主ADC或者辅助ADC转换得到的数据量换 算为相应的模拟电压值。 输入 : ulCode为ADC0DAT或者ADC1DAT寄存器中的值, iPGA为主ADC或者辅助ADC中的增益放大器的设置值, fVref为基准电压值。 返回 : 转换得到的模拟电压,float类型。 *******************************************************************************/ float CodeToAV(unsigned long ulCode,int iPGA,float fVref) { float fAINV; fAINV = ((ulCode / 16777215.0) * fVref) / iPGA ; return fAINV; } /****************************************************************************** 函数名 : void Delay(int a) 描述 : 延时函数 输入 : int a 返回 : void *******************************************************************************/ void Delay(int a) { int i,j; for(i = 1 ; i < a ; i++) for(j = 1 ; j < 1000 ; j++); } |
|
相关推荐
1个回答
|
|
有几种可能导致ADuC7060的ADC无法使用外部基准电压:
1. 外部基准电压未正确连接:请确保外部基准电压源已正确连接到MCU的VREF+/VREF-引脚,并且电压源的电压稳定在2.4V。 2. 编程配置错误:需要在代码中正确配置ADC的参考电压。请确保已经设置了正确的寄存器位,使ADC使用外部基准电压。具体配置方式可以参考MCU的用户手册或编程指导。 3. 基准电压的精度:外部基准电压源的精度也可能影响ADC的测量结果。如果基准电压源的精度较低,那么ADC的测量精度也会降低。 关于问题2:当使用外部基准电压时,ADC的输入范围通常是基准电压的0V到基准电压的值。所以,如果你的外部基准电压是2.4V,那么ADC的输入范围应该是0V到2.4V。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-spi编程示例之spi编写程序
657 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第三十七章 image图像对比实验
640 浏览 0 评论
753 浏览 1 评论
546 浏览 0 评论
关于RT-Thread studio添加freemodbus控件失败的问题
910 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11652 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 14:49 , Processed in 0.317561 second(s), Total 38, Slave 33 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号