[技术问答] N76E003 ADC_Bandgap_VDD demo code

[复制链接]
721|7
 楼主| darklighttt 发表于 2020-3-30 19:45 | 显示全部楼层 |阅读模式
本帖最后由 darklighttt 于 2020-3-30 19:46 编辑
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2017 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/

  6. //***********************************************************************************************************
  7. //  Nuvoton Technoledge Corp.
  8. //  Website: http://www.nuvoton.com
  9. //  E-Mail : MicroC-8bit@nuvoton.com
  10. //  Date   : Apr/21/2017
  11. //***********************************************************************************************************

  12. //***********************************************************************************************************
  13. //  File Function: N76E003 ADC demo code
  14. //***********************************************************************************************************

  15. #include "N76E003.h"
  16. #include "SFR_Macro.h"
  17. #include "Function_define.h"
  18. #include "Common.h"
  19. #include "Delay.h"


  20. //*****************  The Following is in define in Fucntion_define.h  ***************************
  21. //****** Always include Function_define.h call the define you want, detail see main(void) *******
  22. //***********************************************************************************************

  23. double  Bandgap_Voltage,VDD_Voltage;                        //please always use "double" mode for this
  24.                
  25. void ADC_Bypass (void)                                                                                // First three times band-gap convert result bypass
  26. {
  27.                 unsigned char ozc;
  28.                 for (ozc=0;ozc<0x03;ozc++)
  29.                 {
  30.                         clr_ADCF;
  31.                         set_ADCS;
  32.                         while(ADCF == 0);
  33.                 }
  34. }
  35.                
  36. void READ_BANDGAP()                                                                                                // Read band-gap actually value after UID two byte.
  37. {                                                                                                                                                                        // Detail description see datasheet V1.02 band-gap chapter.
  38.                 UINT8 BandgapHigh,BandgapLow;
  39.                 double Bandgap_Value;                                                                        // always use double mode define.
  40.         
  41.                 set_IAPEN;
  42.                 IAPAL = 0x0C;
  43.     IAPAH = 0x00;
  44.     IAPCN = READ_UID;
  45.     set_IAPGO;
  46.                 BandgapHigh = IAPFD;
  47.                 IAPAL = 0x0d;
  48.     IAPAH = 0x00;
  49.     IAPCN = READ_UID;
  50.     set_IAPGO;
  51.                 BandgapLow = IAPFD;
  52.                 BandgapLow = BandgapLow&0x0F;
  53.                 clr_IAPEN;
  54.                 Bandgap_Value = (BandgapHigh<<4)+BandgapLow;
  55.                 Bandgap_Voltage = 3072/(0x0fff/Bandgap_Value);
  56. }
  57.                         
  58. /******************************************************************************
  59. The main C function.  Program execution starts
  60. here after stack initialization.
  61. ******************************************************************************/
  62. void main (void)
  63. {

  64.                 double bgvalue;
  65.                 unsigned int i;
  66.                 set_CLOEN;
  67.                 P12_Quasi_Mode;                                                                                                                //For GPIO1 output, Find in "Function_define.h" - "GPIO INIT"
  68.                 InitialUART0_Timer1(115200);
  69.                 READ_BANDGAP();
  70.                 Enable_ADC_BandGap;                                                                                                //Find in "Function_define.h" - "ADC INIT"
  71.                 ADC_Bypass();

  72.                 for(i=0;i<5;i++)
  73.     {
  74.                         Timer0_Delay1ms(20);
  75.                         clr_ADCF;
  76.                         set_ADCS;                                                                        // ADC start trig signal
  77.       while(ADCF == 0);
  78.                         ADCdataH[i] = ADCRH;
  79.                         ADCdataL[i] = ADCRL;
  80.                 }               
  81.                
  82.                 for(i=0;i<5;i++)
  83.     {
  84.                         ADCsumH = ADCsumH + ADCdataH[i];
  85.                         ADCsumL = ADCsumL + ADCdataL[i];
  86.                 }                                

  87.                 ADCavgH = ADCsumH/5;
  88.                 ADCavgL = ADCsumL/5;
  89.         
  90.                 bgvalue = (ADCavgH<<4) + ADCavgL;
  91.                 VDD_Voltage = (0x1000/bgvalue)*Bandgap_Voltage;
  92. //                printf ("\n Bandgap voltage = %e", Bandgap_Voltage);
  93. //                printf ("\n VDD voltage = %e", VDD_Voltage);
  94.     while(1);
  95. }




jiekou001 发表于 2020-3-30 21:52 | 显示全部楼层
差点忘了这个概念了。
heimaojingzhang 发表于 2020-4-6 16:04 | 显示全部楼层
非常感谢楼主分享
keaibukelian 发表于 2020-4-6 16:04 | 显示全部楼层
非常感谢楼主分享
labasi 发表于 2020-4-6 16:04 | 显示全部楼层
非常感谢楼主分享
paotangsan 发表于 2020-4-6 16:05 | 显示全部楼层
非常感谢楼主分享
renzheshengui 发表于 2020-4-6 16:05 | 显示全部楼层
非常感谢楼主分享
antusheng 发表于 2020-4-7 20:15 | 显示全部楼层
怎么和MS系列的例子很像。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

132

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部