Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: К вопросу о надежности сторожа в AVR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
DVF
Предполагается, что люлька ребенка будет подогреваться. насколько надежен AVR в плане надежности работы сторожа? Мне навязывают независимую (дублирующую) схему на компараторе для обеспечения надежности от "вдруг AVR зависнет вместе со сторожем)?" Отсюда вопрос: "В каких случаях может зависнуть cторож?" Подогрев через контакты реле.
GDI
Всегда думал, что "сторож" - это WatchDog, может вы имеете ввиду BOD (детектор снижения напряжения)? Тогда почему он должен "зависнуть вместе с АВР", там, наверное, тот же компаратор стоит, только еще и с цепями задержки сигнала Reset.
DVF
Имел ввиду WatchDog. Ну, предположим у меня хорошее питание, внешний Reset Circuit STM811, климатика - в помещении. Как мне переубедить? Или лучше иметь дублирующую цепь, помня о конечности рессурса МК?
demiurg_spb
Для такого случая (дети) я бы поставил ещё и внешний комбинированный wdt+supervisor...
Тут любые предположения о надёжности-ненадёжности неуместны нужно по-любому дублировать. ИМХО.
DVF
Да будет так.
zltigo
Цитата(DVF @ May 31 2010, 08:06) *
Предполагается, что люлька ребенка будет подогреваться. насколько надежен AVR в плане надежности работы сторожа?

Смотрите наличие у выбранного чипа сертификата на использование в медицинском оборудовании. Если есть, посылаете всех нафиг. Если нет, то это Ваши проблемы. Добавляете Watchdog и ресетчик.
e-serg
Цитата(zltigo @ May 31 2010, 19:09) *
Смотрите наличие у выбранного чипа сертификата на использование в медицинском оборудовании. Если есть, посылаете всех нафиг. Если нет, то это Ваши проблемы. Добавляете Watchdog и ресетчик.

Просто сертификата на микросхему, как бы очень мало. Нужен будет сертификат на все устройство.
Это же не кресло с подогревом, для любимого начальника.
кого поджарить советуете?
zltigo
Цитата(e-serg @ Jun 1 2010, 03:26) *
Нужен будет сертификат на все устройство.

Кто-то утверждал обратное? Речь идет конкретно о возможности применения для данных применений некого чипа.
Все остальное, включая доказательство того, что разработанное на разрешенной базе устройство может быть использовано в медицине, уже забота разработчика устройства.
sbw
Цитата(DVF @ May 31 2010, 09:06) *
Предполагается, что люлька ребенка будет подогреваться. насколько надежен AVR в плане надежности работы сторожа? Мне навязывают независимую (дублирующую) схему на компараторе для обеспечения надежности от "вдруг AVR зависнет вместе со сторожем)?" Отсюда вопрос: "В каких случаях может зависнуть cторож?" Подогрев через контакты реле.


Столкнулся с ситуацией, когда виснет устройство (на mega32), причем так, что включенный WDT его не ресетит. Уже несколько дней извел на понимание проблемы, но пока безрезультатно. Иногда не виснет, а глючит (однократный сбой). BOD включен, WD включен... Процессор еще не менял, но до сих пор мне сбойные не попадались.

Так что я бы советовал ставить внешний супервизор со своим таймаутом и пинать его от ножки проца.
ArtemKAD
Цитата
Столкнулся с ситуацией, когда виснет устройство (на mega32), причем так, что включенный WDT его не ресетит.

В "подвисшем состоянии" код проходит через точку сброса WDT...
Цитата
Так что я бы советовал ставить внешний супервизор со своим таймаутом и пинать его от ножки проца.

Что помешает ему так-же "подвиснуть" как и с внутреним?
Dima_G
Цитата(sbw @ Oct 4 2010, 18:17) *
Столкнулся с ситуацией, когда виснет устройство (на mega32), причем так, что включенный WDT его не ресетит.


В каком месте программы сбрасываете ватчдог? Надеюсь, не в прерывании?
Jhohn
Цитата(Dima_G @ Oct 4 2010, 16:41) *
В каком месте программы сбрасываете ватчдог? Надеюсь, не в прерывании?


Все прекрасно описано в " Сторожевой таймер!..., быть ему ...или не быть?" http://electronix.ru/forum/index.php?showt...=15187&st=0
sbw
Цитата(Dima_G @ Oct 4 2010, 15:41) *
В каком месте программы сбрасываете ватчдог? Надеюсь, не в прерывании?

В прерывании готовности АЦП. Прерывание - freerun. Причем ресетится вочдог после выставления уровня на ноге. В этом же прерывании происходит передача по SPI.

// отправить байт по SPI

if (data_command == command_)
{
data_command = data_;

if (transfer_address <= max_channel) // если номер канала в пределах массива
{
PORTB &= ~(1<<packet_control); // ~SS = 0 - начать передачу
SPDR = transfer_address; // послать 1й стартовый ноль или адрес
} // если за пределами массива - ничего не посылаем
}
else // data_command = data_
{
data_command = command_;

if (transfer_address == 0)
{
SPDR = 0; // второй стартовый ноль
transfer_address++; // увеличить номер канала
}
else
{
if (transfer_address <= max_channel) // если номер канала в пределах массива
{
SPDR = ch_levels_address_send [transfer_address-1]; // послать уровень канала
transfer_address++; // увеличить номер канала
}
else // if transfer_address > max_channel
{
PORTB |= 1<<packet_control; // ~SS = 1, завершить передачу
transfer_address=0;

ch_levels_address_temp = ch_levels_address_change; // переписать указатели на массивы
ch_levels_address_change = ch_levels_address_send;
ch_levels_address_send = ch_levels_address_temp;

wdt_reset(); // <<<<<<<<<<<<---------- WD reset
}

}
}

переменная transfer_address в другом месте не обнуляется, только при старте программы.
Состояние после зависа - уровень 1 на ноге выставлен, передачи нет (ни данных, ни клока).
Когда происходит просто сбой - то ощущение, что меняется код программы: часть данных передается, а часть - нет. Или будто бы память (в котором хранится массив на передачу) запорота и не обновляется.


Цитата(ArtemKAD @ Oct 4 2010, 15:31) *
В "подвисшем состоянии" код проходит через точку сброса WDT...

Что помешает ему так-же "подвиснуть" как и с внутреним?


если бы проходил - была бы передача по SPI, чего не наблюдается осциллографом.

Забыл добавить, что мега работает от внешнего кварца 16мгц. Грешил на него - менял, менял конденсаторы обвязки. Но после того, как переключил на внутренний RC и оно зависло все равно - "опустились руки". Завтра попробую поменять мегу, она "не свежая" была, выпаяна из другого проекта.
rezident
Глупо просто/тупо сбрасывать WDT в прерывании. laughing.gif
Сбрасывать WDT нужно только после проверки условия и только при выполнении этого условия. В условии обычно проверяются флаги прохождения критически важных участков кода. Т.е. в разных местах программы взводятся битовые флаги. При проверке условия установки этих флагов WDT сбрасывается только в том случае, если установлены все эти флаги. После сброса WDT сбрасываются и флаги.
Jhohn
Цитата(rezident @ Oct 4 2010, 20:27) *
Сбрасывать WDT нужно только после проверки условия и только при выполнении этого условия. В условии обычно проверяются флаги прохождения критически важных участков кода. Т.е. в разных местах программы взводятся битовые флаги. При проверке условия установки этих флагов WDT сбрасывается только в том случае, если установлены все эти флаги. После сброса WDT сбрасываются и флаги.

Используется для диагностики при зависании, чтобы выявить место глюка?
ArtemKAD
Цитата
если бы проходил - была бы передача по SPI, чего не наблюдается осциллографом.

Может быть и обратная ситуация - WDT может не дать запуститься процу постоянно сбрасывая его в самом начале программы. Иногда это связано с не корректной оптимизацией кода компилятором(смотреть полученый код)...
Batman
Обычно все критичные устройства включаю через т.н. динамическое реле. Это схема из пары транзисторов диодов и конденсаторов. Реле замкнуто тогда, когда на входе присутствует некая частота. В случае зависания МК (который и генерирует эту частоту) либо при отгорании порта, на входе будет одно из стабильных состояний 1 или 0. Реле отключится.
ArtemKAD
Цитата
В случае зависания МК (который и генерирует эту частоту) либо при отгорании порта, на входе будет одно из стабильных состояний 1 или 0. Реле отключится.

Шас.... МК не зависает полностью - он исполняет некий участок кода который вполне может продолжать генерить.
2) Надежность МК на порядок выше надежности реле. Подобная "защита" - хорошо разложенные грабли....
Batman
laughing.gif По моему Вас понесло с надежностью maniac.gif. Мне кажется вероятность появления НЛО на Тверской с пьяными тетками в тарелке намного выше. Самопроизвольных зависаний МК (без учета корявых рук) за 5 лет у меня не было. Выограли порты. Подобная защита широко применяется в подземной добыче, где без согласований с госнадзором даже чихнуть нельзяexcl.gif wink.gif
ArtemKAD
Цитата
Выограли порты.

Да, порты выгорали... После того, как выгорали буфера к которым они подключены. smile3046.gif Иногда выгорали с половиной платы в прямом смысле слова....
Цитата
По моему Вас понесло с надежностью . Мне кажется вероятность появления НЛО на Тверской с пьяными тетками в тарелке намного выше. Самопроизвольных зависаний МК (без учета корявых рук) за 5 лет у меня не было.

А я даже не знаю было или нет... Но то, что на нескольких десятках тысяч моих изделий на которых никогда небыло кнопки "Reset" никто за десять лет не заметил зависания - 100%... Причем выключателей питания там так-же обычно не предусматриваю...
sbw
Цитата(ArtemKAD @ Oct 5 2010, 13:54) *
Может быть и обратная ситуация - WDT может не дать запуститься процу постоянно сбрасывая его в самом начале программы. Иногда это связано с не корректной оптимизацией кода компилятором(смотреть полученый код)...

не, тогда бы светодиод мигал - между моментом сброса, когда порты отключены от нагрузки, и моментом инициализации порта, когда на него выставляется "1" для светодиода, должно проходить время тайм-аута WDT. А он горит постоянно.
ArtemKAD
Цитата
между моментом сброса, когда порты отключены от нагрузки, и моментом инициализации порта, когда на него выставляется "1" для светодиода, должно проходить время тайм-аута WDT.

Нет. Там время паузы равно времени таймера старта(см в SUT-биты в фьюзах) + время с начала проги до иннициализации порта. Т.е. вполне может измеряться микросекундами. Т.е. глазом можно паузу и не заметить - смотри осциллографом или вместо светодиода поставь пищалку...
Itch
Мне кажется стоит подключить какой-нибудь кондовый датчик перегрева в разрыв основной цепи питания обогрева.
Залипнет реле, отгорит порт в AVR... мало ли что может произойти.

Представьте, что ваше устройство управляет спусковым крючком ружья, нацеленного вам в голову. Если работает нормально, то крючок находится в опущеном состоянии. Если же происходит зависание, то происходит выстрел.

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