搜索
bottom↓
回复: 0

网上搜的新唐M051 ADC转换程序参考电压为什么是4480呢?

[复制链接]

出0入0汤圆

发表于 2018-7-19 21:23:34 | 显示全部楼层 |阅读模式
最近在看新唐N76E003        的AD转换,然后在网上搜AD转换的例子,搜了一篇,不明白里面的参考电压AREF_VOLTAGE为什么定义为4480呢,如果是接5V,应该定义为5000呀,
用新唐仿真器给N76E003最小系统板供电,使用4480,用万用表量了量电压,貌似结果偏差不大。
感谢。

http://bbs.21ic.com/icview-1106804-1-1.html
/******************************************************************
*注   意:硬件上的AVDD一定要接上基准电压
******************************************************************/
#include "SmartM_M0.h"
#define DEBUGMSG              printf
#define ADC_CLOCK_DIVIDER     0x00040000
#define ADC_CLK_Source        0x00000000
#define AREF_VOLTAGE          4480
     
STATIC VOID AdcInit(VOID)
{
if(ADC_CLK_Source==0x00000004)
    {
        PLLCON |= PLL_SEL;
        PLL_Enable();
        /* 等待PLL稳定 */
  while((CLKSTATUS & PLL_STB) == 0);
}
    /* 复位ADC */   
    set_ADC_RST;
    clr_ADC_RST;
/* ADC时钟使能 */      
    set_ADEN_CLK;
    if (ADC_CLK_Source==0x00000000 )
    {
        ADCClkSource_ex12MHZ;
    }
    else if(ADC_CLK_Source==0x00000004 )
    {
        ADCClkSource_PLL;
    }
    else if(ADC_CLK_Source==0x00000008 )
    {
        ADCClkSource_int22MHZ;
    }
    /* 设置ADC分频器 */
    CLKDIV=ADC_CLOCK_DIVIDER;

    /* ADC使能 */
    set_ADEN;
    set_CALEN;   
while(!(ADCALR&CALDONE));
    /* 单次转换模式 */
    setAD_SIG;            
    clr_DIFFEN;
/* 设置ADC通道 */
    set_CHEN0;
    /* 使能P1.0为模拟输入引脚 */
    set_ADC0_channel;
/* 禁止P1.0数字输入通道 */
P1_OFFD |= OFFD0;
    /* 设置P1.0引脚为输入模式Configure P1.0 as input mode */
    P10_InputOnly;
    /* 清除ADC中断标志位 */
    set_ADF;      
}
/****************************************
*函数名称:main
*输    入:无
*输    出:无
*功    能:函数主体
******************************************/
INT32 main(VOID)
{
     UINT32 unVoltageValue;
                           
  PROTECT_REG          //ISP下载时保护FLASH存储器
  (
   PWRCON |= XTL12M_EN;       //默认时钟源为外部晶振
   while((CLKSTATUS & XTL12M_STB) == 0);    //等待12MHz时钟稳定
  
   CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M;//设置外部晶振为系统时钟
  )
  UartInit(12000000,9600);       //波特率设置为9600bps
  AdcInit();
  while(1)
  {
     set_ADST;            //启动ADC
  while(ADSR&ADF==0);        //等待ADC结束
  set_ADF;          //清空ADC结束标志位
  unVoltageValue = AREF_VOLTAGE*(ADDR0&0xFFF)/4096;//将ADC值转换为电压值
  DEBUGMSG("Voltage %d mv \r\n",unVoltageValue);
  Delayms(500);
  }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 15:02

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表