Перейти к содержанию

Трабл С Powerdown В Attiny13


pavelm-ks

Рекомендуемые сообщения

Всем привет !

Помогите с такой проблемой.

Пишу прожку на СVAVR(1.25.8 Proff) для Attiny13 тестирую в Протеусе (7.1SP0 ) все работает как надо. В проге заюзаны таймер (в прерывании по таймеру дергаю ногой PB.0 - "типа шим" ) PB.1 PB.2 PB.3 -настроены как входы(1и2 с подтяжкой), АЦП PB.4(контролирую напругу) , WDT отключен...

Но потом понял, что надо бы режим энергосбережения заюзать.

И вот ту начались проблемы:

Протрахавшись решил просто для начала добиться того чтобы котроллер засыпал не говоря уже о пробуждении.

Пробовал стандартую библиотеку СVAVR sleep.h

Просто, до основного цикла While, в main{}, после инциализации всех портов и регистров заданных кодевизардом, пишу powerdown() - ноль на массу прога в протеусе выполняется без всяких засыпаний.

Потом вырубил визардовскую библиотеку .

Решил просто установить в MCUCR 4-й и 5-й бит в 1.

Прописал:

MCUCR=0b00110000; //CVAVR походу в курсе что такое MCUCR...

Тоже нифига. но при этом если выстявляю PUD=1,

MCUCR=0b01000000; //То подтяжка выходов пропадает как и положено по даташиту т.е. вроде как кодевижен управляет этим регистром нормально.

Потом решил попробовать асмовскую вставку (в асме я конечно почти полный ноль так что поправьте если что )

#asm

cli //запрещаем прерывания

in r16,$35 //считываем значение порта 35 (MCUCR) в 16-й регистр

sbr r16,0b00110000 меняем 4-й и 5-й бит на 1

cbr r16,0b00001000 меняем 3-й бит на 0

out $35,r16 //пишем в порт измененное значение

sei //разрешаем прерывания

#endasm

Тоже нифига - протеус колбасит как глухонемой и ничего не засыпает...

Подскажите что не так?

Что-то, еще надо поменять?

Или что-то будит проц постоянно(но вроде кроме INT0 который у меня не используется и WDT ничего его будить не может )?

Или это протеус так не корректно себя ведет ?

Спасибо!

В протеусе все по дефолту (WDT - default, Clock - default)

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

надо сначала ввести команду: sleep_enable();

а потом уже:

powerdown();

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

надо ввести команду: sleep_enable();

а потом уже:

powerdown();

В конце ассмовской вставки добавь инструкцию SLEEP.

Спасибище! Оба варианта работают !

Ссылка на комментарий
Поделиться на другие сайты

Блин, опять какая то ботва .

Не срабатывает Reset пир переполнении таймера . Proteus выдает Timer Expired - interrupt ganarated and processor will be reset after its handling. И все, дальше на этом все затыкается ...

что за условие надо выполнить для reset a проца , о каком обращении идет речь?

Ссылка на комментарий
Поделиться на другие сайты

При powerdown();

Из спячки можно выйти по моему только при срабатывании прерывания по низкому уровню, и срабатыванию RESET .

Таймеры , и прочая ботва - выключены полностью.

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

Из даташита :

When the SM1..0 bits are written to 10, the SLEEP instruction makes the MCU enter

Power-down mode. In this mode, the Oscillator is stopped, while the external interrupts,

and the Watchdog continue operating (if enabled). Only an External Reset, a Watchdog

Reset, a Brown-out Reset, an external level interrupt on INT0, or a pin change interrupt

can wake up the MCU. This sleep mode halts all generated clocks, allowing operation of

asynchronous modules only.

Т.е. в 13-й тиньке пробуждение из Power-down модет быть по внешнему RESET, по ресету от Watchdog, по ресету от Brown-out(снижение порога питания), по INT0 или по изменению уровня на любом пине если активироно таковое...

Протеус в дебаге тоже говорит что микруша пошла в Power-down , потом через 2 сек (так у меня натроено) ВІдает что переполнился WDT . Тольк вот на этом и все . Дальше говорит что ресет будет произведен если ....

А разобрался - я выставил прерывание по WDT вот он его обработки и ждет ...

Ссылка на комментарий
Поделиться на другие сайты

А теперь еще :)

Все вроде бы работает нормально до второго ресете. Т.е. вначале все ок, входим в Power-down, через секунду (как заложено предделителем) переполняется WDT, идет ресет, выполняется кусочек кода, уходим в Power-down и вот тут опять стабатывает WDT только уже не через 1 сек, а через 20...30 мсек....? Такое ощущение что после первого переполения WDT происходит како-то луп переполнения собаки. Т.е он то ли не сбрасывается полсе RESET толи еще какая-то причина ...? Может какие-то флаги или регистры надо сбрасывать . Если да, то какие, когда и где ? Спасибо!

Изменено пользователем pavelm-ks
Ссылка на комментарий
Поделиться на другие сайты

wdr-то делаете?

Как оно себя ведет на реальном железе?

Возможно стоит выложить код

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

WDR - конечно. Я грешу на wdrf. Надыбал вот такую фигню:

Note: If the Watchdog is accidentally enabled, for example by a runaway pointer or brown-out

condition, the device will be reset and the Watchdog Timer will stay enabled. If the code is not

set up to handle the Watchdog, this might lead to an eternal loop of time-out resets. To avoid this

situation, the application software should always clear the Watchdog System Reset Flag

(WDRF) and the WDE control bit in the initialization routine, even if the Watchdog is not in use.

Ссылка на комментарий
Поделиться на другие сайты

Господа целый день пропарил мозг но так ине понял . Помогите!

Не могу врeбится это WDT быстро сбрасывается или PROTEUS тупит.

Суть ракова . Прога генерит шим , проверяет напряжение и состояние кноки и если кнопка нажата шим вырубается девас входит в Power-Down и потом по WDT просыпается раз в секунду проверяет напряжение и состояние кнопки и елс иничегоен изменилось снова Power-Down. Сброс WDT происходит примерно раз в 5мсек вместе с проверкой состояния кнопки и АЦП преобразованием.

Так вот если нажать кнопку то первый цикл проходит нормально - WDT переполяется, через секнду(на и настроен предделитель ) срабатывает ресет и т.д. но если продолжать удерживать кнопку , то судя по тресам протеуса WDT тоже начинает переполняться каждые 4,5мсек хотя сброс вроде срабатывает ... И полные непонятки с временными характеристиками (ини идут как-то не последовательно в трейсе).

пробовал сбрасывать флаг WDRF таким кодом

#asm

cli

in r16,$34

cbr r16,0b00001000

out $34,r16

sei

#endasm

Нифига не изменилось...

Трейс протеуса:

20b23346c059b9cab7dacbfc13eb3f98.jpg

Ссылка на комментарий
Поделиться на другие сайты

код-то есть?

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Код есть , но он весьма ламерский и без бутылочки думаю не разобраться :). Основные точки могу выложить :

Инициализация watchdoga

// Watchdog Timer initialization

// Watchdog Timer Prescaler: OSC/128k

// Watchdog Timer interrupt: Off

#pragma optsize-

WDTCR=0x1E;

WDTCR=0x0E;

#ifdef _OPTIMIZE_SIZE_

#pragma optsize+

#endif

#asm( "wdr")//на всякий случай сбрасываю wdr

while (1)

{

// Place your code here

if (timer1==1) //переменная таймера для опроса кнопок с частотой 200гц

{

#asm( "wdr")

voltage=read_adc(2); //контролируем напряжение а ADC2

if(PINB.2==0|voltage<576)

{

PORTB.0=0;shim=0;timer1=0;sleep_enable();powerdown();

};// проверяем состояние кнопки , напяржение, и если услове выполнено гасим шим, обнуляем переменную таймера,входим режим энергосбережения

далее идет проверка еще нескольких условий если не вошли в режим энергосбережения...И все это время колбасит прерывание по таймеру в котором работает шим (если shim==1 ) и выставляется переменная опроса кнопок.

}

};

}

Просто смущает что собака натроена на 1 сек, а после первого нормального срабатывания переполнение идет примерно в такт с опросом кнопок ....

И если кнопку удерживать при эмуляции, то происходит вот какая фигня, а ели кнопку отпусть и снова нажать не останавливая при этом эмуляцию, то снова один цикл сна проходит нормально, а дальше каша какая-то.

Тем более в остальном коде проги, который обрабатывается когда кнопка не нажата, нет ничего военного. Т.е. ни сбросов собаки ни работы с регистрами натроек . ...

В общем я подозреваю протеус . Т.к. если посмотреть трейс, то целая пачка событий на которые надо не один десяток тактов у него они происходят за одну микросекунду. Т.е примерно за 5 тактов (проц настроен на 4,8Мгц). т.е. в протеусе видать какой-то глюк с обработкой таймера собаки когда нажимаются кнопки и идет обработка анимированного управления схемой(ИМХО)...Тем более в трейсах он выдает что собака настроена на 1,024с и тут нате сброс через 4,3мс. Ну допустим сброс потому что он не обнулися и гдето там какойто флаг завис , но дак какого Х тогда сброс аж через 4,3мс - сбрасывал бы тогда сразу после инициализации... Я в просрации.... :unknw:

Изменено пользователем pavelm-ks
Ссылка на комментарий
Поделиться на другие сайты

Протеус не всегда эмулирует правильно, я с этим столкнулся при попытке изменить скважность ШИМа, так что стоит проверить на реальном железе. Что собака должна делать, сбрасывать контроллер или просто вызывать прерывание?

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Протеус не всегда эмулирует правильно, я с этим столкнулся при попытке изменить скважность ШИМа, так что стоит проверить на реальном железе. Что собака должна делать, сбрасывать контроллер или просто вызывать прерывание?

Сбрасывать. Типа заснул , через секунду по ресету проснулся, проверил посты и снова баиньки.

Еще вопрос по флагу WDRF . На что он влияет кроме того, что если он поднят, то нельзя без его сброса вырубить собаку (сбросить WDE) ? Может ли быть так, что если он поднят, то будут циклические сбросы ?

Изменено пользователем pavelm-ks
Ссылка на комментарий
Поделиться на другие сайты

Сброс собаки лучше не совать в условия. Пусть сбрасывается в основном цикле.

Пробовал - сути дела не менят, только пакован сообщениий неподемный становится.

Также в прерывание таймера засовывал - нифига - картина та же...

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...