MEGA8A低功耗问题<省电模式+内部8M晶振+定时器2唤醒>
本帖最后由 MiniCat 于 2013-1-24 14:57 编辑Mega8A,内部8MHz晶振,外部接了个32.768KHz的晶振,省电模式,定时器2溢出中断唤醒,这种方式为什么进入睡眠之后无法唤醒?睡过头啦?
代码:
{
cli();
port_init(); //IO口初始化
timer2_init();
MCUCR = 0x00; //单片机工作状态寄存器 INT0 低电平触发 INT1 下降沿触发
TIMSK = 0x45; //定时器中断1、2、3
sei();
MCUCR |= BIT(SE)|BIT(SM1)|BIT(SM0);
asm volatile ("sleep" : : );//进入省电模式
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
}
//TIMER2 initialize - prescale:1024
// WGM: Normal
// desired value: 5.01Sec
// actual value:5.000Sec (0.2%)
void timer2_init(void)
{
TCCR2 = 0x00; //stop
ASSR= 0x08; //set async mode
TCNT2 = 0xE0; //setup
OCR2= 0x20;
TCCR2 = 0x07; //start
}
ISR(SIG_OVERFLOW2)
{
TCCR2=0;
}
外接了个32.768K的晶振用于异步驱动定时器2唤醒睡眠中的单片机,不知道为什么,睡着了就再也没醒过 今天有人在吗?帮我瞅瞅呀 本帖最后由 lcw_swust 于 2013-1-24 16:47 编辑
仔细看手册
我是这样用的
//--------------------------------------------------
// T2初始化:CTC模式,匹配中断频率:32768/128=256Hz
//--------------------------------------------------
void timer2_init(void)
{
TCCR2 = 0x00; //stop
ASSR= 0x08; //set async mode
TCNT2 = 0x00; //setup
OCR2= 0x7f;//0x7f;
TCCR2 = 0x09; //start
while(ASSR&0X07);//等待T2操作
} 兄弟,M8搞低功耗真的很累...........
低功耗,永远的430啊430{:lol:}{:tongue:} 恩 我也找到原因了,感谢楼上的2位,是因为异步寄存器没有更新完成就进入休眠,所以永远也醒不来了, while(TCN2UB!=0);
while(TCR2UB!=0);
while(OCR2UB!=0);
现在可以了。 lcw_swust 发表于 2013-1-24 16:45 static/image/common/back.gif
仔细看手册
还有一个问题想请教下您,AVR在省电模式下要关闭看门狗,在休眠时会不会出现程序跑飞了,永远睡着了的现象呢? skynet 发表于 2013-1-24 16:46 static/image/common/back.gif
兄弟,M8搞低功耗真的很累...........
低功耗,永远的430啊430
是的,M8怎么调功耗都比430要高很多,没办法,领导钟爱AVR,我们只是打工的。 MiniCat 发表于 2013-1-25 08:56 static/image/common/back.gif
还有一个问题想请教下您,AVR在省电模式下要关闭看门狗,在休眠时会不会出现程序跑飞了,永远睡着了的现 ...
我做了个闹钟,也是用的省电模式T2唤醒,一直没开看门狗,到现在用了半年多一直没出问题。 lcw_swust 发表于 2013-1-25 09:11 static/image/common/back.gif
我做了个闹钟,也是用的省电模式T2唤醒,一直没开看门狗,到现在用了半年多一直没出问题。 ...
哦哦。。那应该没什么问题滴,我省点模式下有88uA电流,掉电的时候还有6uA,这个省电模式的电流对吗? MiniCat 发表于 2013-1-25 10:05 static/image/common/back.gif
哦哦。。那应该没什么问题滴,我省点模式下有88uA电流,掉电的时候还有6uA,这个省电模式的电流对吗? ...
参考手册里的那个表格“省电模式电流和VCC的关系“,电流在10uA左右才算正常,具体注意事项参考“最小化功耗”那一章
lcw_swust 发表于 2013-1-25 10:23 static/image/common/back.gif
参考手册里的那个表格“省电模式电流和VCC的关系“,电流在10uA左右才算正常,具体注意事项参考“最小化 ...
Thank You!我再研究研究,不明白再问您! lcw_swust 发表于 2013-1-25 10:23 static/image/common/back.gif
参考手册里的那个表格“省电模式电流和VCC的关系“,电流在10uA左右才算正常,具体注意事项参考“最小化 ...
您好,再请教您个问题,我现在AVR上5秒钟内,电流是14uA,5秒钟过后就一直升,升到500uA左右又掉下来,然后就一直掉到60uA左右停止了,现象非常怪异,目前就一个单片机在运行,没有其他任何东西了。 本帖最后由 MiniCat 于 2013-1-27 16:48 编辑
lcw_swust 发表于 2013-1-25 10:23 static/image/common/back.gif
参考手册里的那个表格“省电模式电流和VCC的关系“,电流在10uA左右才算正常,具体注意事项参考“最小化 ...void OS_Sleep(void)
{
SFIOR |=BIT(PUD);
ACSR |=BIT(ACD);
ADCSRA &=~BIT(ADEN);
LED_OFF;
wdt_disable();
MCUCR = BIT(SE)|BIT(SM1)|BIT(SM0);
asm volatile ("sleep" : : );//进入省电模式
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
MCUCR &=~BIT(SE);
}
void OS_WakeUp(void)
{
watchdog_init();
SFIOR &=~BIT(PUD);
ACSR &=~BIT(ACD);
}基本每次唤醒了再睡着了,都会是这样一个过程,电流很不稳定。IO口目前只有一个灯在用,其余都悬空了。 本帖最后由 MiniCat 于 2013-1-27 16:48 编辑
lcw_swust 发表于 2013-1-25 10:23 static/image/common/back.gif
参考手册里的那个表格“省电模式电流和VCC的关系“,电流在10uA左右才算正常,具体注意事项参考“最小化 ...
我一个一个试过去,发现是内部上拉电阻的问题,关闭上拉电阻,电流14uA,不稳定,不关闭上拉电阻,电流是97uA,就不会出现跳变的现象,这咋子解释呢? MiniCat 发表于 2013-1-27 16:40 static/image/common/back.gif
我一个一个试过去,发现是内部上拉电阻的问题,关闭上拉电阻,电流14uA,不稳定,不关闭上拉电阻,电流是 ...
楼主可不可以把电路图弄出来看看?
关闭上拉电阻电流不稳定是因为输入口容易受干扰出现高低电平,IO内部电路翻转会消耗电流。
就算是IO不翻转,当输入口的电压位于1/2VCC附近也会消耗较大的电流。
lcw_swust 发表于 2013-1-28 10:38 static/image/common/back.gif
楼主可不可以把电路图弄出来看看?
关闭上拉电阻电流不稳定是因为输入口容易受干扰出现高低电平,IO内部 ...
系统供电3.3V。
没用的IO口悬空了,刚才量了下,不加上拉的时候,这些IO口的电平有的是0.36V,有的是1.33V,然后在进入休眠后 这些电平会有小幅度的变化,0.38V、1.36V,所以可以判定那些电流是这些空闲的IO口产生的,怎么才能消除这些电平呢?我初始化的时候已经给他们一个明确的电平了0或者1,难道不加上拉的时候,这些电平都不能稳定的达到预定值? lcw_swust 发表于 2013-1-28 10:38 static/image/common/back.gif
楼主可不可以把电路图弄出来看看?
关闭上拉电阻电流不稳定是因为输入口容易受干扰出现高低电平,IO内部 ...
目前测试的时候只有一个MCU在工作,其他的器件我全都拆下去了。 MiniCat 发表于 2013-1-30 11:06 static/image/common/back.gif
系统供电3.3V。
没用的IO口悬空了,刚才量了下,不加上拉的时候,这些IO口的电平有的是0.36V,有的是1.3 ...
楼主用的Mega48?
貌似与Mega8有些区别。
IO口悬空时,若用万用表去量直流电压,应该接近0V才对,因为万用表电压档内阻约10M欧。
建议用示波器测量IO口,看单片机是否正常。
不知楼主使能内部上拉电阻时是不是先写DDR后写PORT? lcw_swust 发表于 2013-1-30 11:39 static/image/common/back.gif
楼主用的Mega48?
貌似与Mega8有些区别。
IO口悬空时,若用万用表去量直流电压,应该接近0V才对,因为万用 ...
用的是mega8 原理图是48的,没改。
是用外用表量的,我用示波器试试去,先写的PORTX 后写DDRX。 MiniCat 发表于 2013-1-30 14:25 static/image/common/back.gif
用的是mega8 原理图是48的,没改。
是用外用表量的,我用示波器试试去,先写的PORTX 后写DDRX。 ...
听说,若要使能内部上拉电阻,得先写DDR,后写PORT。
想要降低功耗,一般不允许输入脚悬空,需要使能上拉或设置为输出。 mark
页:
[1]