打印
[技术问答]

请问:M451band-gap的电压是多少

[复制链接]
975|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lqluocn@dl|  楼主 | 2020-6-14 09:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用了M453。由于在项目中使用了AVCC做参考电源,所以想band-gap的电压来反推算AVCC的准确电压。

使用特权

评论回复
沙发
598330983| | 2020-6-14 21:38 | 只看该作者
看数据手册和技术手册啊。

使用特权

评论回复
板凳
643757107| | 2020-6-15 13:19 | 只看该作者
官方有个其他型号的类似例子,可以参考。

使用特权

评论回复
地板
gejigeji521| | 2020-6-15 15:37 | 只看该作者
有没有方法,怎么反推啊。

使用特权

评论回复
5
jasontu| | 2020-6-15 16:52 | 只看该作者
BANDGAP 1.25V

使用特权

评论回复
6
xinxianshi| | 2020-6-15 19:49 | 只看该作者
ADC好像可以接到内部Bandgap,然后另外一路接到AVCC,这样根据两个测量比值不就知道了。

使用特权

评论回复
7
598330983| | 2020-6-18 22:38 | 只看该作者
实现了吗

使用特权

评论回复
8
huangcunxiake| | 2020-6-20 09:03 | 只看该作者
默认是1.25,一般在1.22到1.27

使用特权

评论回复
9
玛尼玛尼哄| | 2020-6-20 21:37 | 只看该作者
参考N76E003的方法

使用特权

评论回复
10
玛尼玛尼哄| | 2020-6-20 21:37 | 只看该作者
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2016 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

//***********************************************************************************************************
//  Nuvoton Technoledge Corp.
//  Website: http://www.nuvoton.com
//  E-Mail : MicroC-8bit@nuvoton.com
//  Date   : Apr/21/2016
//***********************************************************************************************************

//***********************************************************************************************************
//  File Function: N76E885 ADC demo code
//***********************************************************************************************************

#include "N76E003.h"
#include "SFR_Macro.h"
#include "Function_define.h"
#include "Common.h"
#include "Delay.h"

//*****************  The Following is in define in Fucntion_define.h  ***************************
//****** Always include Function_define.h call the define you want, detail see main(void) *******
//***********************************************************************************************
#if 0
//#define Enable_ADC_BandGap        ADCCON0|=SET_BIT3;ADCCON0&=0xF8;                                                                                                                                                                                                                                                        //Band-gap 1.22V
#endif

double  Bandgap_Voltage,VDD_Voltage;                        //please always use "double" mode for this
unsigned  char xdata ADCdataH[5], ADCdataL[5];
int ADCsumH=0, ADCsumL=0;
unsigned char ADCavgH,ADCavgL;

void READ_BANDGAP()
{
                UINT8 BandgapHigh,BandgapLow,BandgapMark;
                double Bandgap_Value,Bandgap_Voltage_Temp;
       
                set_IAPEN;
                IAPCN = READ_UID;
                IAPAL = 0x0d;
    IAPAH = 0x00;
    set_IAPGO;
                BandgapLow = IAPFD;
                BandgapMark = BandgapLow&0xF0;
                       
                if (BandgapMark==0x80)
                {
                                BandgapLow = BandgapLow&0x0F;
                                IAPAL = 0x0C;
                                IAPAH = 0x00;
                                set_IAPGO;
                                BandgapHigh = IAPFD;
                                Bandgap_Value = (BandgapHigh<<4)+BandgapLow;
                                Bandgap_Voltage_Temp = Bandgap_Value*3/4;
                                Bandgap_Voltage = Bandgap_Voltage_Temp - 33;                        //the actually banggap voltage value is similar this value.
                }
                if (BandgapMark==0x00)
                {
                                BandgapLow = BandgapLow&0x0F;
                                IAPAL = 0x0C;
                                IAPAH = 0x00;
                                set_IAPGO;
                                BandgapHigh = IAPFD;
                                Bandgap_Value = (BandgapHigh<<4)+BandgapLow;
                                Bandgap_Voltage= Bandgap_Value*3/4;
                }
                if (BandgapMark==0x90)
                {
                                IAPAL = 0x0E;
                                IAPAH = 0x00;
                                set_IAPGO;
                                BandgapHigh = IAPFD;
                                IAPAL = 0x0F;
                                IAPAH = 0x00;
                                set_IAPGO;
                                BandgapLow = IAPFD;
                                BandgapLow = BandgapLow&0x0F;
                                Bandgap_Value = (BandgapHigh<<4)+BandgapLow;
                                Bandgap_Voltage= Bandgap_Value*3/4;
                }
                clr_IAPEN;
//                        printf ("\n BG High = %bX",BandgapHigh);
//                        printf ("\n BG Low = %bX",BandgapLow);
//                        printf ("\n BG ROMMAP = %e",Bandgap_Voltage);
}
               
               
/******************************************************************************
The main C function.  Program execution starts
here after stack initialization.
******************************************************************************/
void main (void)
{
                double bgvalue;
                unsigned int i;
       
                InitialUART0_Timer1(115200);
                READ_BANDGAP();
                printf ("\n BG ROMMAP = %e",Bandgap_Voltage);
       
                while (1)
                {
                                Enable_ADC_BandGap;                                                                                               
                                CKDIV = 0x02;                                                                                                                        // IMPORTANT!! Modify system clock to 4MHz ,then add the ADC sampling clock base to add the sampling timing.
                                for(i=0;i<5;i++)                                                                                                        // All following ADC detect timing is 200uS run under 4MHz.
                                {
                                                clr_ADCF;
                                                set_ADCS;                                                                                                                               
                                                while(ADCF == 0);
                                                ADCdataH[i] = ADCRH;
                                                ADCdataL[i] = ADCRL;
                                }               
                                CKDIV = 0x00;                                                                                                                        // After ADC sampling, modify system clock back to 16MHz to run next code.
                                Disable_ADC;
                                for(i=2;i<5;i++)                                                                                                        // use the last 3 times data to make average
                                {
                                        ADCsumH = ADCsumH + ADCdataH[i];
                                        ADCsumL = ADCsumL + ADCdataL[i];
                                }                               
                                ADCavgH = ADCsumH/3;
                                ADCavgL = ADCsumL/3;
                                bgvalue = (ADCavgH<<4) + ADCavgL;
                                VDD_Voltage = (0x1000/bgvalue)*Bandgap_Voltage;
                                printf ("\n VDD voltage = %e", VDD_Voltage);
                                Timer0_Delay1ms(500);
                                ADCsumH = 0;
                                ADCsumL = 0;
                }
}


使用特权

评论回复
11
mintspring| | 2020-6-20 22:15 | 只看该作者
这个系列官方没有提供参考例子,可以参考吗051的例子,很多函数是通用的。

使用特权

评论回复
12
drer| | 2020-7-6 17:07 | 只看该作者
怎么个反推法啊

使用特权

评论回复
13
gwsan| | 2020-7-6 17:08 | 只看该作者
还可以这样?

使用特权

评论回复
14
kxsi| | 2020-7-6 17:08 | 只看该作者
这样做准确吗

使用特权

评论回复
15
nawu| | 2020-7-6 17:08 | 只看该作者
呵呵呵 长见识了

使用特权

评论回复
16
qcliu| | 2020-7-6 17:09 | 只看该作者
有其他型号的例程可以参考?

使用特权

评论回复
17
huangcunxiake| | 2020-7-6 17:57 | 只看该作者
读取内部校正值。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

6

帖子

0

粉丝