[技术问答] ML51 可以使用BOD欠压检测代替ADC采集电源电压?

[复制链接]
1353|16
 楼主| wzx1994 发表于 2020-5-19 10:11 | 显示全部楼层 |阅读模式
BOD欠压检测有8级电平1.8V, 2.0V, 2.4V, 2.7V, 3.0V, 3.7V 和 4.4V可以设置。
 楼主| wzx1994 发表于 2020-5-19 10:12 | 显示全部楼层
怎么配置欠压检测中断来着?
 楼主| wzx1994 发表于 2020-5-19 10:14 | 显示全部楼层
个人想法:供电电压为3.3v,第一次BOD欠压检测电平设置为2.4v,然后进入中断提示,再将BOD欠压检测电平设置为2.0v。
玛尼玛尼哄 发表于 2020-5-19 11:02 | 显示全部楼层
BOD功能用于保存数据的,比如掉电前保存数据,跟你说的这个用法不太一样。

评论

用法很多,只要有用就行  发表于 2020-5-19 11:18
玛尼玛尼哄 发表于 2020-5-19 11:03 | 显示全部楼层
在BOD中断里保存掉电要保存的数据,非常有用的一个功能。TI的单片机都没这么高级的功能。

评论

大佬,ML51系列的玩过吗?怎么配置BOD中断呢?  发表于 2020-5-19 11:18
antusheng 发表于 2020-5-19 20:36 | 显示全部楼层
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2019 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/

  6. //***********************************************************************************************************
  7. //  Website: http://www.nuvoton.com
  8. //  E-Mail : MicroC-8bit@nuvoton.com
  9. //***********************************************************************************************************

  10. //***********************************************************************************************************
  11. //  File Function: ML51 simple GPIO toggle out demo code
  12. //***********************************************************************************************************

  13. #include "ML51.h"
  14. /**
  15. * [url=home.php?mod=space&uid=247401]@brief[/url]       ACMP interrupt subroutine
  16. * @param       None
  17. * [url=home.php?mod=space&uid=266161]@return[/url]      None
  18. * [url=home.php?mod=space&uid=1543424]@Details[/url]     
  19. */


  20. /**
  21. * @brief       ACMP negtive input use Bandgap voltage
  22. * @param       None
  23. * @return      None
  24. * @details     
  25. */
  26. void WKT_ISR(void) interrupt 17            // Vector [url=home.php?mod=space&uid=72445]@[/url]  0x8B
  27. {
  28.     clr_WKCON_WKTF;
  29.         P14 = 0;
  30. //      _delay_();
  31.       P14 = 1;
  32. //      _delay_();
  33.           P14 = 0;
  34. }

  35. void ACMP_ISR (void) interrupt 23
  36. {
  37.   SFRS = 0x00;
  38.   if ((ACMPSR&SET_BIT2)==SET_BIT2)
  39.   {
  40.     ACMPSR&=CLR_BIT2;
  41.     P14 ^=1;
  42.   }
  43.   else if ((ACMPSR&SET_BIT0)==SET_BIT0)
  44.   {
  45.     ACMPSR&=CLR_BIT0;
  46.     P14 ^=1;
  47.   }  
  48. }

  49. void main (void)
  50. {

  51.   unsigned char i;

  52. /* Setting Multi function pin setting for GPIO toggle
  53.    * include gipo.c in Common for GPIO mode setting
  54. */
  55.     MFP_P13_GPIO;
  56.     P13_QUASI_MODE;
  57.     MFP_P14_GPIO;
  58.     P14_QUASI_MODE;


  59.     for(i=0;i<0x05;i++)
  60.     {
  61.       P14 = 0;
  62.       _delay_();
  63.       P14 = 1;
  64.       _delay_();
  65.     }
  66.    
  67.     #if 1  
  68.     MFP_P23_ACMP0_P1;   
  69.     MFP_P24_ACMP0_N0;
  70.     MFP_P41_ACMP0_O;   

  71. ///* ACMP VBG intial
  72. ///* Initial ACMP0 P2.3 as positive and Bandgap as negetive input, Output to P4.1 */
  73. //    ACMP_Open(ACMP0, ACMP_CTL_POSSEL_P1, ACMP_CTL_NEGSEL_VBG,0, ACMP_CTL_ACMP0_OUTPUT_ENABLE, ACMP_CTL_HYSTERESIS_ENABLE);
  74. ///* Initial ACMP interrupt enable, wakeup function dis ble.*/
  75. //    ACMP_INTEnable(ACMP0, ACMP_CTL_WAKEUP_ENABLE, ACMP_CTL_INT_ENABLE);
  76.    
  77. /* ACMP VREF intial
  78.    * include acmp.c in Library for ACMP initial and interrupt setting. */
  79. //    VREF_Open(2);
  80. /* Initial ACMP0 P2.3 as positive and Bandgap as negetive input, Output to P4.1 */
  81.     ACMP_Open(ACMP0, ACMP_CTL_POSSEL_P1, ACMP_CTL_NEGSEL_CRV, ACMP_CTL_CRV_VREF, ACMP_CTL_ACMP0_OUTPUT_ENABLE, ACMP_CTL_HYSTERESIS_ENABLE);
  82. /* CRV Value = CRV source voltage * (2+CRV1CTL)/12. so for this example = VREF/2.*/
  83.     ACMP_CRVValue(ACMP0, 4);  
  84. /* Initial ACMP interrupt enable, wakeup function disable.*/
  85.     ACMP_INTEnable(ACMP0, ACMP_CTL_WAKEUP_ENABLE, ACMP_CTL_INT_ENABLE);
  86.   
  87.     WKT_Open(38400,256,100);
  88.     WKT_Interrupt(Enable);
  89.    
  90.     ENABLE_GLOBAL_INTERRUPT;
  91.     #endif

  92. //    BOD_Enable(VBOD24,BOD_RESET_ENABLE);
  93. //    BOD_LowPower_Enable(LPBOD_MODE2,BOD_FT_ENABLE);
  94.     LVR_Enable();
  95.     BOD_Disable();
  96.     POR_Disable();
  97. //    LVR_Disable();
  98. //    LowPowerLVR_Enable();
  99. //    BIAS_ALL_DIGITAL();
  100.     SFRS = 1;
  101.     CKDIV = 0x0c;
  102. /* Enable Low power run mode */
  103. //  FsysSelect(FSYS_LIRC);
  104. //  set_PCON_LPR;
  105.   //set_PCON_IDLE;
  106.   //set_PCON_PD;
  107.     while(1)
  108.     {   
  109.     //      P14 = 0;
  110.     //      P14 = 1;
  111.       set_PCON_PD;
  112.     }
  113.       
  114. }





antusheng 发表于 2020-5-19 20:37 | 显示全部楼层
BSP里面有例子的,楼主下载看看。
antusheng 发表于 2020-5-19 20:38 | 显示全部楼层
在头文件power.h power.c里面定义了相关操作的库函数。
dongnanxibei 发表于 2020-5-19 23:47 | 显示全部楼层
BOD_Enable(VBOD24,BOD_RESET_ENABLE);

评论

这个是BOD复位使能。并没有中断使能  发表于 2020-5-20 08:37
zhuomuniao110 发表于 2020-5-20 16:50 | 显示全部楼层
void BOD_ISR(void) interrupt 8           // Vector @  0x43
{
    clr_BODCON0_BOF;
}
zhuomuniao110 发表于 2020-5-20 16:54 | 显示全部楼层
set_IE_EBOD
这个是使能BOD中断
zhuomuniao110 发表于 2020-5-20 16:55 | 显示全部楼层
clr_IE_EBOD
这个是关闭BOD中断
zhuomuniao110 发表于 2020-5-20 16:55 | 显示全部楼层
楼主看看头文件啊,里面都有
352235ec4f08cd10ca.png

评论

看到了,大佬。就是不懂为啥手册上BOD那章节都没有介绍  发表于 2020-5-22 09:02
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

2643

帖子

3

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