ATMEGA48V + WDT + CVAVR

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
AlexVM
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Пт май 22, 2009 18:43:25

ATMEGA48V + WDT + CVAVR

Сообщение AlexVM »

Доброго времени суток!

1. Что есть:
Делаю приборчик с батарейным питанием, который делает измерение чего-либо, передает результаты куда либо и засыпает. Использую WDT для пробуждения со сбросом через каждые примерно 8 секунд.
2. Что хотелось бы:
Чтобы измерения и передача проходили один раз примерно в 40 секунд. Как я понимаю, необходимо использовать прерывание от WDT, инкрементировать счетчик, проверять его значение и засыпать, если значение не равно 5-и. Если равно 5-ти, то измерять, передавать, обнулять счетчик и засыпать.

Так вот тут то и затык. Как это сделать? У меня не получается - почему то и по прерыванию происходит сброс контролера.
А если по первому варианту использовать запись в еепромину значения счетчика каждые 8 секунд, то её хватит на сутки, наверное :(

Заранее спасибо!
Аватара пользователя
Danko
Сверлит текстолит когтями
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай
Контактная информация:

Сообщение Danko »

Совершенно верно. Сторожевой таймер выполняет сброс МК.
Для пробуждения МК нужно другое событие: например внешнее прерывание от генератора на 40 секунд.

Лично сам не делал но в сети видел схемы на полевиках с задержкой на несколько минут. Если конечно не нужна точность в 40 секунд.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
AlexVM
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Пт май 22, 2009 18:43:25

Сообщение AlexVM »

Так в 48 меге есть прерывание от собаки. Вот его то использовать и не получается.
stas00n
Вымогатель припоя
Сообщения: 557
Зарегистрирован: Пн мар 23, 2009 04:03:45

Re: ATMEGA48V + WDT + CVAVR

Сообщение stas00n »

AlexVM писал(а):...почему то и по прерыванию происходит сброс контролера.

А битики WDE и WDIE в регистре WDTCSR правильно выставлены?
stas00n
Вымогатель припоя
Сообщения: 557
Зарегистрирован: Пн мар 23, 2009 04:03:45

Сообщение stas00n »

Вроде в вашем случае WDTCSR должен быть 0b01110001 = 71h
Аватара пользователя
Danko
Сверлит текстолит когтями
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай
Контактная информация:

Сообщение Danko »

AlexVM, Вы наверняка пользовались "волшебником", который генерирует такой код

Код: Выделить всё

// Watchdog Timer initialization
// Watchdog Timer Prescaler: OSC/1024k
// Watchdog Timer interrupt: On
#pragma optsize-
#asm("wdr")
WDTCSR=0x39;
WDTCSR=0x69;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif


по которому и WDE (бит 3) и WDIE (бит 6) равны 1 т.е. вызывается прерывание с последующим сбросом.

для работы прерывания должно быть: WDE=0, WDIE=1.

при смене делителя нужно сбрасывать бит WDCE (бит 4), по сему и инициализация WDTCSR производится в две строки.

Волшебник класная штука, но песенку Пугачевой не стоит забывать. :))
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
stas00n
Вымогатель припоя
Сообщения: 557
Зарегистрирован: Пн мар 23, 2009 04:03:45

Сообщение stas00n »

И кстати, проверь, не запрограммирован ли (случайно или нарочно) собачий фьюз (WDTON), если запрограммирован, по переполнению вотчдога всегда будет сброс, независимо от того, что ты напишешь в коде, - надо вернуть в исходное (1). Между прочим, все это есть на 53-й странице даташита, читал?
AlexVM
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Пт май 22, 2009 18:43:25

TNX

Сообщение AlexVM »

Огромное спасибо всем, особенно коту Danko! ;)

Так и получилось - визард с WDE накосячил и я за ним.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»