Вообщем делаю автоотключение при снижении питания внут. средствами МК. Суть: при снижении Uп ниже 2,7В срабатывает BOD, сбрасывает МК , по идее напруга на батарейке должна подняться выше порога, МК перезапускается , в самом начале проверяется регистр MCUSR на установку бита BORF, если бит в 1 , то МК погружается в спячку sleep ом до лучших времен.
вот код проверки:
Код
0: 4d c0 rjmp .+154 ; 0x9c <my_init>
if (MCUSR&(1<<BORF))
9c: 04 b6 in r0, 0x34 ; 52
9e: 02 fe sbrs r0, 2
a0: 04 c0 rjmp .+8 ; 0xaa <__stack+0xb>
MCUCR=(1<<PUD)|(1<<SE)|(1<<SM1);
a2: 80 e7 ldi r24, 0x70 ; 112
a4: 85 bf out 0x35, r24 ; 53
asm ("sleep");
a6: 88 95 sleep
a8: 01 c0 rjmp .+2 ; 0xac <__stack+0xd>
MCUSR=0;
aa: 14 be out 0x34, r1 ; 52
ac: 11 24 eor r1, r1
ae: 1f be out 0x3f, r1 ; 63
if (MCUSR&(1<<BORF))
9c: 04 b6 in r0, 0x34 ; 52
9e: 02 fe sbrs r0, 2
a0: 04 c0 rjmp .+8 ; 0xaa <__stack+0xb>
MCUCR=(1<<PUD)|(1<<SE)|(1<<SM1);
a2: 80 e7 ldi r24, 0x70 ; 112
a4: 85 bf out 0x35, r24 ; 53
asm ("sleep");
a6: 88 95 sleep
a8: 01 c0 rjmp .+2 ; 0xac <__stack+0xd>
MCUSR=0;
aa: 14 be out 0x34, r1 ; 52
ac: 11 24 eor r1, r1
ae: 1f be out 0x3f, r1 ; 63
Установил фузы:
BODLEVEL 1..0: 01 - 2.7 v
CKSEL1..0: 01 - 4,8МГц от RC ген.
SUT1..0: 11 - 6+14 СК после сброса
Схема сброса приведена, Rсброса = 10кОм
Устройство не запускается не зависимо от питания , т.е. от гарнтированных 5В - результат такойже. Убрал команду sleep схема заработала. Т.е. получается при подаче Uп , хотя по идее в течении когото времяни должен действовать внешний сигнал Reset на входе, запускается BOD и устанавливает бит MCUSR.BORF .
Или внеш. Reset не действует на рег.MCUSR ? В чем может быть дело ?