Страница 1 из 1
ATMega128 - сторожевой таймер
Добавлено: Пн июл 20, 2009 13:33:11
Leonid90
Для АТМ128 написана программа. В неё нужно ввести сторожевой таймер с временем срабатывания около 1 минуты. Как известно, внутренний сторожевой таймер срабатывает максимум через 2 сек. Другие таймеры (Т1 и Т3) уже заняты другими делами. Кто что посоветует?
Добавлено: Пн июл 20, 2009 15:50:16
ibiza11
настроить сторожевой таймер на прерывания, а в обработчике проверять сколько раз он сработал, при срабатывании 30 раз выставлять на свободную ножку контроллера ноль, а ножку снаружи соединить с выводом "ресет", только вот с командой сброса сторожевого таймера нужно будет сбрасывать и счетчик срабатываний. другого пути пока не вижу)))
Добавлено: Пн июл 20, 2009 20:19:19
ARV
ibiza11 писал(а):настроить сторожевой таймер на прерывания, а в обработчике проверять сколько раз он сработал, при срабатывании 30 раз выставлять на свободную ножку контроллера ноль, а ножку снаружи соединить с выводом "ресет", только вот с командой сброса сторожевого таймера нужно будет сбрасывать и счетчик срабатываний. другого пути пока не вижу)))
прежде чем давать советы, вы бы изучили аппаратное строение контроллера
atmega128 - в нем нет режима WDT с прерыванием, только сброс. кроме того, самосброс путем выдачи уровня на порт, соединенный с выводом сброса - не будет работать, во всяком случае, никакой гарантии устойчивой работы дать будет нельзя.
надо искать внешний WDT, хотя с таким долгим периодом - сомневаюсь, что они найдутся... можно смастерить самодельный WDT на той же 555 микросхеме - будет надежно, но, естественно, придется жертвовать одним портом... и хорошо продумать схему

Добавлено: Пн июл 20, 2009 21:28:42
ibiza11
по крайней мере внешний вывод нормально работает на тине2313=)насчет мег даже не задумывался, что у них нет прерывания переполнения вотчдога.
Добавлено: Вт июл 21, 2009 07:13:31
ARV
ibiza11 писал(а):по крайней мере внешний вывод нормально работает на тине2313=)насчет мег даже не задумывался, что у них нет прерывания переполнения вотчдога.
во-первых. задумываться иной раз просто необходимо. во-вторых, просто необходимо читать фирменные документы по разным вопросам. в частности, фирма атмел не рекомендует способ сброса через импульс с вывода. я бы назвал ваш случай - удачным стечением обстоятельств, и не рекомендовал бы его использовать.
Добавлено: Вт июл 21, 2009 09:41:27
ibiza11
Пусть будет удачное стечение обстоятельств. Я считаю ваши придирки неуместными, ARV. Человек задал вопрос, я на него ответил, если он решит, что можно и попробует, то сразу наткнется на проблему отсутствия прерывания вотчдога и отложит этот вариант. Советуя, исходил только из личного опыта. Я уже сказал, что не подумал, что у Мег нет вышеупомянутого прерывания, поскольку мне оно никогда не было нужно.
Человеку свойственно ошибаться и я ошибся, от этого ничего не произошло, не зворвалась америка или газовопровод в Москве. И моя ошибка совершенно не значит, что я никогда не задумываюсь и не читаю фирменную документацию, а как раз наоборот - ззастваит меня лично просмотреть то, в чем я ошибся. Лично я не стал бы уповать на мнение других, если бы разрабатывал серьезный проект или хотя бы его проверял.
Добавлено: Вт июл 21, 2009 10:32:42
Leonid90
Спасибо за советы. Думаю попробовать использовать прерывание от таймер2 (8-ми разр), который запитать от внешнего входа, куда подать сигнал 0.5Гц.
Добавлено: Вт июл 21, 2009 20:25:50
ARV
Leonid90 писал(а):Спасибо за советы. Думаю попробовать использовать прерывание от таймер2 (8-ми разр), который запитать от внешнего входа, куда подать сигнал 0.5Гц.
не думайте так. реальный сторож должен быть реализован чисто аппаратно, а в вашем случае обязательно будет некая программная обработка. в итоге, если от сбоя нарушится работа системы прерываний (например), ваш таймер хоть и досчитает до куда надо, но ничего не сделает - никакого сброса...
ibiza11, я обращал ваше внимание на то, что недопустимо полагаться на самосброс сигналом с собственного порта, поступающим на вход сброса. мало того, что тут опять же завязана программная обработка, так еще и для сброса необходим импульс определенной длительности, а в вашем случае происходит вот что: процессор выставляет 0 на порту, этот ноль поступает на вход сброса, начинается сброс ядра и выводы портов переходят в третье состояние, т.е. сигнал сбороса исчезает... в этом случае может зависание наступить, может неверно проинициализироваться периферия - мало ли что может быть, если сброс некорректный? а все ваши рассуждения - это лишнее.
хочу вас убедить, что кроме встроенного или внешнего аппаратного WDT никакие другие варианты не могут считаться надежными! а самосброс по собственному сигналу с порта недопустим вообще!
Добавлено: Вт июл 21, 2009 20:49:01
ibiza11
я согласен, но не со всем=) рассуждения никогда не лишни!!!
Добавлено: Ср июл 22, 2009 00:06:58
DrWatson
Ну вот приблизительный пример аппаратного сторожевого таймера.
Недостатки:
1. Лишние три корпуса,
2. Неопределенность состояния счетчиков при включении питания, которая самоустраняется не менее чем за 64 такта тактовой частоты контроллера, что потребует введение в код программы в самом начале задержки на 64 такта при сбросе по включению питания или BOD,
3. Обязательное тактирование контроллера от кварца, внешней RC-цепи или внешнего источника CLK,
4. Использование двух линий порта(ов) МК,
5. Использование таймера Т0 в асинхронном режиме с часовым кварцем на 32768Гц с предделителем 128 и выдачей импульсов по переполнению таймера на вывод OC0 (режим Normal Top=FF).
6. Ограничение тактовой частоты МК (не менее 4Гц

)
Достоинства:
1. Достаточно точное время переполнения (для данного случая 1,06(6)с+-0,008с без учета точности часового кварца).
2. Длительность импульса сброса 32 такта тактовой частоты контроллера, что при CLK=16МГц составит 2мкс, что укладывается в требования к длительности импульса сброса приведенные в даташите (не менее 1,5мкс).
3. Простой сброс данной схемы двумя командами: сбросить бит Pxx в 0, затем установить снова в единицу. Также производится и выключение/включение этого сторожевого таймера.
Повторюсь, пример приблизительный, набросал, как говорится, на скорую руку, но если верить графическому изображению элементов в Протеусе, должно работать.
При инициализации до запуска таймера Т0 необходимо выключить (сбросить) этот WDT выдачей в порт Рхх логического нуля, после настройки таймера, в нужном месте программы, запустить его выдачей в порт Рхх логической единицы, сбрасывать как описано выше.
Блин, забыл на вход CLK U1:A повесить подтягивающий резистор 10кОм.
Добавлено: Ср июл 22, 2009 08:08:36
ibiza11
зачем такой огород, если можно на конденсаторе? правда одна линия порта в/в с ПРОГРАММНЫМ дерганьем на ноль.примерно так
Добавлено: Ср июл 22, 2009 10:54:04
ARV
ibiza11, посмотрите на свою схему: что будет, если с МК станет приходить глухой ноль? конденсатор в цепи базы "сбросного" транзистора никогда не зарядится, а значит, никакого сброса не получится... не смотря на кажущуюся простоту, WDT не так уж элементрано устроен. схема должна реагировать на изменения входного сигнала, чтобы срабатывать при отсутствии таких изменений в течение определенного периода. сразу предупреждаю: не торопитесь использовать конденсаторы бездумно - они тоже могут привести к подводным камешкам...
Добавлено: Ср июл 22, 2009 11:59:53
ibiza11
тогда надо постоянную составляющую фильтровать. здесь нужны положительные импульсы. теперь оцените пожалуйста:
Добавлено: Ср июл 22, 2009 12:37:03
ARV
ну, теперь более-менее, хотя никакой гарантии длительности выдержки этого "сторожа" схема не обеспечивает. я продолжаю оставаться сторонником нормальных микросхемных сторожей. например DS1232, MAX705, MAX823 - все обеспечивают около 1,5 секунды время срабатывания сторожа. так тут гарантия, а не бабушка надвое сказала...
Добавлено: Ср июл 22, 2009 12:54:25
ibiza11
полностью согласен, что схема не отличается стабильностью, но топикстартер просил длинную задержку - в этой схеме есть такая возможность. как вариант, думаю можно попробовать.
Добавлено: Ср июл 22, 2009 13:52:59
ARV
блин, совсем забыл, что речь о минутах... почему-то считал, что о секундах...

Добавлено: Ср июл 22, 2009 17:51:15
DrWatson
Насчет последней схемы: конденсатор зарядится через диод и куда он разряжаться будет? последующие импульсы просто не будут проходить: конденсатор заряжен, диод закрыт.
Если уж делать дискриминатор на конденсаторе, то примерно так:
Добавлено: Ср июл 22, 2009 17:58:59
ibiza11
вы правы, диод убираем) остался в предыдущей схемы=)