原理:
利用单片机内部的FVR稳压电源,ADC进行检测判断单片机的VDD电压是否足够,不足进行输出显示。
应用:
当单片机的供电是由电池供电时,可以测量单片机的供电是否足够,指示电池电量不足。
实际电路测试功能可行,已经应用在具体电路上。
软件:
MPLAB X IDE v4.15 proteus 8.6.
1、仿真电路图;
2、源程序加注释。
说明:
1、利用PIC16F1501内部的FVR,ADC可以测量VDD电压,判断单片机是否供电电压不足。
2、将ADC的基准设为Vdd,通过FVR使能并稳定到1.024V后,用ADC测量值。
3、有公式ADC读值=(1.024/VDD)*1024。设置Vdd参考为3.3V,则(1.024/VDD)*1024=318.
4、VDD越大,FVR的ADC读值越小,所以只要判断读值小于318,说明VDD 大于3.3V
5、图中左边VDD=3.3V.输出指示灯亮,正常,右边VDD=3.29V输出指示灯灭。
6、两个芯片的程序相同,电压基准是3.3V,3.3V以下指示输出灯不亮。
仿真原理图如下
单片机源程序如下:
#include"sys.h"
#include #include #include #include #include #include #define POWER_LED PORTCbits.RC0 //RC0 为系统电源指示灯, //电源大于3.3V时,灯亮; //电源小于3.3V时,灯灭; void sys_init() //系统初始化 { OSCCON=0x7F; //16M 内部晶振 FVRCON=0B01010001; //FVREN,ADCFVR=01(1.024V) ADCON0=0B01111100; //FVR channel,ADCON ADCON1=0B10000000; //right 对齐 ANSELC=0; //PORTC是IO口 PORTC=0; TRISC=0; //PORTC是输出 } void main() { sys_init(); //系统初始化 while(1) { FVRCONbits.FVREN=1; //FVR 使能 while(!FVRCONbits.FVRRDY); //FVR 是否稳定 ADCON0bits.ADON=1; //ADC 使能 __delay_ms(1); //delay ADCON0bits.GO=1; //ADC 转换开始 while(ADCON0bits.GO); //等待ADC 转换结束 uint16_t adc_result=(uint16_t)ADRESH<<8 |ADRESL; //得到ADC 读数 if(adc_result<318) POWER_LED=1; //(1.024/3.3)*1024=318 else POWER_LED=0; FVRCONbits.FVREN=0; //FVR 使能关闭,节能 __delay_ms(5000); } }
上一篇:PIC12F675单片机LED控制程序
下一篇:PIC单片机的一个简单的SPI小程序
推荐阅读
史海拾趣
求助,電源電路工作原理和外部電器件的作用請教各位附件中的電源線路 輸入DC-48v轉換DC3.3v的電路 請教電路中的二極管,電阻,電容,電感和U65的作用 能講解的更詳細更好, 小弟在此謝謝了… 查看全部问答∨ |
|
本帖最后由 paulhyde 于 2014-9-15 08:59 编辑 【竞赛背景】 随着集成电路制造工艺相对成熟,集成电路产业逐渐演化为设计、制造、封装和测试四个协调发展的产业结构。 上世纪末,集成电路设计业开创以知识产权(IP)为核心的创新时期,这标志着集 ...… 查看全部问答∨ |
|
自己开发的程序在一些PND的机器上运行时发现左键长按消息没响应。 我自己左键长按消息的判断是这样的:在左键按下后启动一个定时器 然后在左键抬起前在定时器判断是否长按 然后做相应的事情。 但是,我在自己PC版的程序中用LButtonDow ...… 查看全部问答∨ |
|
请问在哪里可以下载到EZDriverInstaller的源程序? 因为工作需要,需要看DriverStudio 中的工具NuMega EZDriverInstaller的源代码,请问在哪里可以下载到?谢谢!… 查看全部问答∨ |
|
是这样的,我的电路上使用了一片DSP F28335,还有一片芯片XA2c256。现在板子的问题是,每当DSP在工作的时候,CPLD就无法和赛灵思的下载器连接在一起,提示的错误是,芯片的IDCODE是全部为0.也就是无法连接。到最后我把DSP的晶振去掉了,结果CPLD就 ...… 查看全部问答∨ |