Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Неправильная работа BOD в ATtiny13A ?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
MaxiMuz
Доброго времяни суток !

Вообщем делаю автоотключение при снижении питания внут. средствами МК. Суть: при снижении 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


Установил фузы:
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 ? В чем может быть дело ?
sKWO
Цитата(MaxiMuz @ Dec 8 2012, 14:26) *
Или внеш. Reset не действует на рег.MCUSR ? В чем может быть дело ?

если у вас слиип обрабатываетя, тогда и зафиксирован сброс броунаутдетектора, ведь при старте (включении МК), он равен 1.
ещё есть смутное мнение, у Вас тау цепи сброса около 2 милисекунд. У же при старте Ваш МК фиксирует уровень ниже для срабатывания БОД.
Может тут собака?

Цитата(MaxiMuz @ Dec 8 2012, 14:26) *
SUT1..0: 11 - 6+14 СК после сброса

а вот тут уже спорный вопрос, SUT1..0: 11 у тини13 резервный, поставьте
(01 14CK + 4 ms Fast rising power) ну или
(10 14CK + 64 ms Slowly rising power)
в первом случае должно времени быть достаточно, чтобы не зафиксировать низкое напряжения при старте когда МК уже тактируется.
MaxiMuz
Цитата(sKWO @ Dec 8 2012, 18:38) *
а вот тут уже спорный вопрос, SUT1..0: 11 у тини13 резервный, поставьте
(01 14CK + 4 ms Fast rising power) ну или
(10 14CK + 64 ms Slowly rising power)
в первом случае должно времени быть достаточно, чтобы не зафиксировать низкое напряжения при старте когда МК уже тактируется.

извиняюсь, конечно же SUT1..0: выставил в 00 , просто с инверсией запутался, PonyProg у меня в обойх галочки стоят. Этот режим рекомендован в доках

Цитата(sKWO @ Dec 8 2012, 18:38) *
ещё есть смутное мнение, у Вас тау цепи сброса около 2 милисекунд. У же при старте Ваш МК фиксирует уровень ниже для срабатывания БОД.
Может тут собака?

тогда получается BOD начинает действовать во время когда еще reset не закончился (до старта) и смело уже тогда выставляет MCUSR ?
zombi
Цитата(MaxiMuz @ Dec 8 2012, 14:26) *
Т.е. получается при подаче Uп , хотя по идее в течении когото времяни должен действовать внешний сигнал Reset на входе, запускается BOD и устанавливает бит MCUSR.BORF .
Или внеш. Reset не действует на рег.MCUSR ? В чем может быть дело ?

Попробуйте перед засыпанием вывести состояние интересующих Вас флагов регистра MCUSR на свободные пины проца.
Может стоит проверять не только BORF но и PORF?
sKWO
Цитата(MaxiMuz @ Dec 8 2012, 23:10) *
Этот режим рекомендован в доках

ТАУ= R*C; C=0.22мкФ, R= 10 000 Ом. ТАУ = 2,2 мС.
После подачи питания на ресете будет Ваших 5 вольт только после 2 миллисекунд. Почему 2 миллисекунды? Насколько я помню ресет у АВР подвешен к источнику питания внутри 33 килоомами. Все подтяжки Вы отключаете позже перед уходом в павер давн.

Когда SUT = 00, Вы просто разрешили детектор напряжения.

Цитата(MaxiMuz @ Dec 8 2012, 23:10) *
тогда получается BOD начинает действовать во время когда еще reset не закончился (до старта) и смело уже тогда выставляет MCUSR ?

да.
14* 1/5 МГц = 2,8 микросек.
То есть в MCUSR выставляется BORF.
BODLEVEL у Вас = 10, срабатывание ниже 1.8 Вольта, этого уровня напряжение на ресете достигнет через 0.72 миллисек.
при тактовой МК 5 МГц через 3 микросекунды в MCUSR выставляется BORF.
Если SUT выставить равным 01 то Вы получите 14CK + 4 ms, этого вполне достаточно.
MaxiMuz
Цитата(sKWO @ Dec 11 2012, 09:50) *
BODLEVEL у Вас = 10, ..

у меня установленно
Цитата
Установил фузы:
BODLEVEL 1..0: 01 - 2.7 В
CKSEL1..0: 01 - 4,8МГц от RC ген.
SUT1..0: 00 - 6+14 СК после сброса

ILYAUL
Он у Вас с самого первого включения сразу сваливался в спячку?
И где очистка этого флага перед сном , что бы при следующем запуске он его заново проверил , а не читал предыдущее значение.?
MaxiMuz
Цитата(ILYAUL @ Dec 13 2012, 12:02) *
Он у Вас с самого первого включения сразу сваливался в спячку?

в том варианте программы кот. приведен выше, да.

MaxiMuz
Цитата(sKWO @ Dec 11 2012, 09:50) *
14* 1/5 МГц = 2,8 микросек.
То есть в MCUSR выставляется BORF.
BODLEVEL у Вас = 10, срабатывание ниже 1.8 Вольта, этого уровня напряжение на ресете достигнет через 0.72 миллисек.
при тактовой МК 5 МГц через 3 микросекунды в MCUSR выставляется BORF.
Если SUT выставить равным 01 то Вы получите 14CK + 4 ms, этого вполне достаточно.

Возможно на выводе Reset RC цепочка и не нужна.
Бит BORF при подаче U выставляется в "1" независимо от того как и когда срабатывает сброс, также как и бит PORF.
ILYAUL
Цитата(MaxiMuz @ Dec 13 2012, 16:33) *
Бит BORF при подаче U выставляется в "1" независимо от того как и когда срабатывает сброс, также как и бит PORF.

Да , ладно.. Сегодня вечером проверю Ваше утверждение на tiny13.
Цитата
• Bit 2 – BORF: Brown-out Reset Flag
This bit is set if a Brown-out Reset occurs. The bit is reset by a Power-on Reset, or by writing a
logic zero to the flag.
MaxiMuz
Для обнаружения понижения напруги ниже в самом начале программы проверяю условие MCUSR.BORF=1 && MCUSR.PORF=0 , если истинно выполняю слип. но в любом случае после этого необходимо обнулить MCUSR.
Цитата(ILYAUL @ Dec 14 2012, 07:31) *
.. Сегодня вечером проверю Ваше утверждение на tiny13.
а что на других камнях по другому ?!..
ILYAUL
Цитата
но в любом случае после этого необходимо обнулить MCUSR.
Ну об этом я писал выше.
Я говорю об этом
Цитата
Бит BORF при подаче U выставляется в "1"

хотя DS, цитату из которого я привел , утверждает обратное, и чтобы не было разночтений проверю именно на таком же MC как у Вас.
zombi
А внешний ресет случайно не запрещён?
MaxiMuz
Цитата(zombi @ Dec 14 2012, 14:33) *
А внешний ресет случайно не запрещён?

нет , ресет разрешен.
еще такое примечание:
пробывал вариант с подключением reset через цепочку как в первом посте , так и оставлял вывод вообще не подключенным ни куда. Результат влияет только на MCUSR.EXTRF
ILYAUL
Да BORF живёт и после выкл. питания
MaxiMuz
Цитата(ILYAUL @ Dec 15 2012, 23:39) *
Да BORF живёт и после выкл. питания

А что на других контроллерах ?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.