[技术问答]

ML51 可以使用BOD欠压检测代替ADC采集电源电压?

[复制链接]
749|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功能用于保存数据的,比如掉电前保存数据,跟你说的这个用法不太一样。

使用特权

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

使用特权

评论回复
评论
wzx1994 2020-5-19 11:18 回复TA
大佬,ML51系列的玩过吗?怎么配置BOD中断呢? 
antusheng| | 2020-5-19 20:36 | 显示全部楼层
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2019 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

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

//***********************************************************************************************************
//  File Function: ML51 simple GPIO toggle out demo code
//***********************************************************************************************************

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


/**
* @brief       ACMP negtive input use Bandgap voltage
* @param       None
* @return      None
* @details     
*/
void WKT_ISR(void) interrupt 17            // Vector [url=home.php?mod=space&uid=72445]@[/url]  0x8B
{
    clr_WKCON_WKTF;
        P14 = 0;
//      _delay_();
      P14 = 1;
//      _delay_();
          P14 = 0;
}

void ACMP_ISR (void) interrupt 23
{
  SFRS = 0x00;
  if ((ACMPSR&SET_BIT2)==SET_BIT2)
  {
    ACMPSR&=CLR_BIT2;
    P14 ^=1;
  }
  else if ((ACMPSR&SET_BIT0)==SET_BIT0)
  {
    ACMPSR&=CLR_BIT0;
    P14 ^=1;
  }  
}

void main (void)
{

  unsigned char i;

/* Setting Multi function pin setting for GPIO toggle
   * include gipo.c in Common for GPIO mode setting
*/
    MFP_P13_GPIO;
    P13_QUASI_MODE;
    MFP_P14_GPIO;
    P14_QUASI_MODE;


    for(i=0;i<0x05;i++)
    {
      P14 = 0;
      _delay_();
      P14 = 1;
      _delay_();
    }
   
    #if 1  
    MFP_P23_ACMP0_P1;   
    MFP_P24_ACMP0_N0;
    MFP_P41_ACMP0_O;   

///* ACMP VBG intial
///* Initial ACMP0 P2.3 as positive and Bandgap as negetive input, Output to P4.1 */
//    ACMP_Open(ACMP0, ACMP_CTL_POSSEL_P1, ACMP_CTL_NEGSEL_VBG,0, ACMP_CTL_ACMP0_OUTPUT_ENABLE, ACMP_CTL_HYSTERESIS_ENABLE);
///* Initial ACMP interrupt enable, wakeup function dis ble.*/
//    ACMP_INTEnable(ACMP0, ACMP_CTL_WAKEUP_ENABLE, ACMP_CTL_INT_ENABLE);
   
/* ACMP VREF intial
   * include acmp.c in Library for ACMP initial and interrupt setting. */
//    VREF_Open(2);
/* Initial ACMP0 P2.3 as positive and Bandgap as negetive input, Output to P4.1 */
    ACMP_Open(ACMP0, ACMP_CTL_POSSEL_P1, ACMP_CTL_NEGSEL_CRV, ACMP_CTL_CRV_VREF, ACMP_CTL_ACMP0_OUTPUT_ENABLE, ACMP_CTL_HYSTERESIS_ENABLE);
/* CRV Value = CRV source voltage * (2+CRV1CTL)/12. so for this example = VREF/2.*/
    ACMP_CRVValue(ACMP0, 4);  
/* Initial ACMP interrupt enable, wakeup function disable.*/
    ACMP_INTEnable(ACMP0, ACMP_CTL_WAKEUP_ENABLE, ACMP_CTL_INT_ENABLE);
  
    WKT_Open(38400,256,100);
    WKT_Interrupt(Enable);
   
    ENABLE_GLOBAL_INTERRUPT;
    #endif

//    BOD_Enable(VBOD24,BOD_RESET_ENABLE);
//    BOD_LowPower_Enable(LPBOD_MODE2,BOD_FT_ENABLE);
    LVR_Enable();
    BOD_Disable();
    POR_Disable();
//    LVR_Disable();
//    LowPowerLVR_Enable();
//    BIAS_ALL_DIGITAL();
    SFRS = 1;
    CKDIV = 0x0c;
/* Enable Low power run mode */
//  FsysSelect(FSYS_LIRC);
//  set_PCON_LPR;
  //set_PCON_IDLE;
  //set_PCON_PD;
    while(1)
    {   
    //      P14 = 0;
    //      P14 = 1;
      set_PCON_PD;
    }
      
}





使用特权

评论回复
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);

使用特权

评论回复
评论
wzx1994 2020-5-20 08:37 回复TA
这个是BOD复位使能。并没有中断使能 
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

使用特权

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

本版积分规则

24

主题

2053

帖子

3

粉丝