搜索
bottom↓
回复: 19

提供一个不需要外围电路的掉电检测方法。AVR专有功能

[复制链接]

出0入0汤圆

发表于 2007-7-22 20:24:42 | 显示全部楼层 |阅读模式
用AD功能来实现,参考电压选择5V电源电压,输入端选择基准电压。上电后读取AD值(取平均值)AD1,在运行过程中不断读取AD2值,如果AD2>>AD1的话,就是掉电状态,马上保存数据。

出0入0汤圆

发表于 2007-7-22 22:00:35 | 显示全部楼层
你实际用过吗?

出0入0汤圆

发表于 2007-7-22 22:03:51 | 显示全部楼层
读取周期是多少? 来得及吗?



不如用比较器。

出0入0汤圆

发表于 2007-7-22 22:09:55 | 显示全部楼层
不用这么麻烦吧,芯艺那本书里似乎有解决方案,几条语句搞定。

出0入0汤圆

发表于 2007-7-22 22:28:23 | 显示全部楼层
何为专有?



  至少我知道MSP430的片内AD也可以测量电源电压,也拥有比较器。

出0入0汤圆

发表于 2007-7-23 00:36:25 | 显示全部楼层
其实真的不用这么麻烦的,充分利用数字端口的功能吧,分压后用数字端口检测就行,除非你要精确判断电压。否则用数字数就完全可以完成这点事情,

出0入0汤圆

发表于 2007-7-23 08:04:49 | 显示全部楼层
读取周期不能太大,要不还没保存数据就没电了.....意义不大,还不如用外部电路做.

这样保存的数据不稳定,说不定是错误的数据.

出0入0汤圆

发表于 2007-7-23 08:52:46 | 显示全部楼层
在99%的应用中,这种方案行不通

出0入0汤圆

发表于 2007-7-24 09:04:58 | 显示全部楼层
同意5楼的,用数字端口方便,做好一个合适的分压就可以了

出0入0汤圆

发表于 2009-11-6 21:50:03 | 显示全部楼层
各位大侠你们好,我翻出这个希望你们能继续帮帮忙,我的是芯片是M8,用楼主的办法可以实现吗?我还没理解透他的意思,不需要外围电路,是不用I/O口吗?我的程序已经把按键和显示做好了,就是保存数据不会做,菜鸟一个,求高手赐教!

(原文件名:2.JPG)

出0入0汤圆

发表于 2009-11-7 17:27:41 | 显示全部楼层
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=787122&bbs_page_no=1&search_mode=4&search_text=yunlong&bbs_id=9999
看看马潮老师的这个帖子!



(原文件名:44444444444.jpg)

用电压比较器中断,进中断后滤波几次,然后直接写EEPROM即可。

出0入0汤圆

发表于 2009-11-7 21:15:11 | 显示全部楼层
我喜欢检测检波之前的电压,只要超过20mS没有脉冲就...

出0入0汤圆

发表于 2009-11-8 01:14:29 | 显示全部楼层
请参考松下PLC的处理方式点击此处下载 ourdev_501021.pdf(文件大小:116K) (原文件名:FP0-A.pdf)

出0入0汤圆

发表于 2009-11-8 01:15:17 | 显示全部楼层
采用M51957B来做电压采样,

出0入0汤圆

发表于 2009-11-10 20:45:52 | 显示全部楼层
首先谢谢各位回复,我上面的硬件B2和B3口已经用掉,ADC口也全用掉,硬件已不能修改,我程序开始的定义:
#include <iom8v.h>
#include <macros.h>
#define  uchar unsigned char
#define  uint  unsigned int
unsigned char a=0,b=0;
const unsigned char 0xC0,0xF9,0xCA,0xC9,0xF1,0xC5,0xC4,0xE9,0xC0,0xC1,
   0xFF};

unsigned char a=0,b=0;这里是开机调用的显示变量,b是十位数码管用的指向数组table[]第0位,也就是0xC0,a是个位数码管用的指向数组table[]第0位,也是0xC0;我关机后再开机当然也还是显示00了,但我程序运行时我按键可以操作两个数码管显示01或12或其他的,但我关机再开机后还是显示00啊,我就是想把关机前显示的数据替换掉开机时的unsigned char a=0,b=0; ,该怎么办....
主函数里显示的是a和b指向的数组里的数据,BIT(i)里的数是数码管的位.我硬件只有一个芯片,ADC和模拟口都已经用完.

出0入0汤圆

发表于 2009-11-10 21:27:31 | 显示全部楼层
你没表达清楚呀,听不懂

出0入0汤圆

发表于 2009-11-10 21:37:57 | 显示全部楼层
#include <iom8v.h>
#include <macros.h>
#define  uchar unsigned char
#define  uint  unsigned int
unsigned char a=0,b=0;
const unsigned char table[]={0xC0,0xF9,0xCA,0xC9,0xF1,0xC5,0xC4,0xE9,0xC0,0xC1,
                                   0xFF};
                                       
                                void delay(uint ms)
       {uint i,j;
              for(i=0;i<ms;i++)
             {for(j=0;j<80;j++);}
       }
               void show(uchar j,uchar k)
                   {
                   PORTC |= (BIT(1)|BIT(4));
                   DDRB |= 0x3F;
                   PORTB |= 0x3F;
                   DDRC|=(BIT(1)|BIT(4));
                   PORTC&=~k;
                   PORTB|=0XFF;
                   DDRB|=0XFF;       
                   PORTB&=table[j];
                   delay(1);
                   }
                                          uchar key_press()
                                           {
                                      uchar j=0,h=0;
                                          PORTC|=(BIT(1)|BIT(4));
                                          DDRC|=BIT(5);
                                          PORTC&=~BIT(5);
                                          DDRD&=~BIT(1);
                                          PORTD|=BIT(1);
                                          h=PIND;//1000 0000
                                          h=h&0X02;
                                           DDRB&=0X40;//0100 0000
                                          PORTB|=0xBF;//1011 1111
                                           NOP();
                                           NOP();
                                           PINB|=0X3F;
                                           j=PINB;
                                           j=j&0X3F;//0011 1111
                                          if((j==0X3F)&&(h==0X02))
                                            {
                                              return 0;//没按下
                                            }
                                             else
                                             {
                                      return 1;//若按键按下
                                             }
                                          }
                        uchar key_scan()
                        {
                        uchar key;
                        if(key_press())
                        {
                        key=PINB;
                        key=key&0X3F;
                        if(!(key==0X3F))
                        {
                        switch(key)
                        {
                   case 0X3E:
               a=1;b=0;
                    break;
                   case 0X3D:
                        a=2;b=0;
                    break;
           case 0X3B:
               a=3;b=0;
                    break;
          case 0X37:
               a=4;b=0;
                    break;
           case 0X2F:
                           a++;
                           break;
           case 0X1F:
                           a--;
                    break;
           default:        key=0;
           break;
           }}}}
void main()
{
  uint i,l;
                DDRD = 0xE3;   
                        DDRD&=0xE3;
                           PORTD = 0x1C;       
                        PORTD&=~BIT(2);
                        DDRB = 0XBF;  
                        PORTB = 0X40;
                        DDRC = 0X3E;
                        PORTC = 0X36;       
while(1)
  {b=(a==10)?b+1:b;
         a=(a==10)?0:a;
         b=(a>9)?b-1:b;
         a=(a>9)?9:a;
         show(a,BIT(1));
         show(b,BIT(4));
          l=key_press();
        if(l)
        {
        i=key_scan();
    }}}
上面的程序是我开始学AVR时编的,功能是按相应的按键改变数码管显示的数字,已经学会了,程序也可以正常运行,现在就是学关机后我怎么保存我刚刚关机时显示的数字....?大侠们理解我的意思了吗?硬件就是上面的原理图。

出90入0汤圆

发表于 2009-11-11 08:30:03 | 显示全部楼层
AD和比较器都可以掉电检测。已用7年,几十万片。

出0入0汤圆

发表于 2015-1-3 21:17:08 | 显示全部楼层
hzpyl 发表于 2009-11-11 08:30
AD和比较器都可以掉电检测。已用7年,几十万片。

大神,用AD怎么检测掉电?求教

出0入0汤圆

发表于 2017-2-17 01:16:40 | 显示全部楼层
ZHENGYANYUAN 发表于 2009-11-8 01:14
请参考松下PLC的处理方式点击此处下载 ourdev_501021.pdf(文件大小:116K) (原文件名:FP0-A.pdf) ...

请教一下,原理图中的PC3Q64M,是什么光耦呢,网上搜不到这个型号。
谢谢!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 04:33

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表