Attiny13A и SLEEP_MODE_PWR_DOWN

Обсуждаем контроллеры компании Atmel.
Ответить
Прорезались зубы
Сообщения: 238
Зарегистрирован: Сб янв 29, 2011 20:26:48

Сообщение king-live »

Доброго времени суток! Есть задача снизить энергопотребление Attiny13A, хотя бы до 100мкА. Отпустил питание микроконтроллера до 2,7В , но максимум чего я добился при режиме SLEEP_MODE_PWR_DOWN, это снижение тока потребления до 550мкА. В FUSE битах я только снизил частоту работы процессора до 4,8Мгц, больше ничего не трогал. Между частотами 9,6Мгц и 4,8Мгц потребление тока практически не изменилось. Между питанием 5В и 2,7В разница в потреблении 150мкА. Контроллер не имеет на плате периферии, ни что не подключено к ножкам МК. Только осцилограф на порту PB4 висит, чтобы проверять режим мигания от прерывания по watchdog. В даташите указанно что нужно камень питать от 1,8В чтобы достичь эффективного энергопотребления. Ещё не проверял. Такое напряжение для моего проекта критично. Выкладываю код, может в нём ещё какая проблема находится. Заранее спасибо! Работаю в связке WinAVR + AVRStudio4.19

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

#include <avr/io.h>
#include <util/delay.h>
#include <avr/wdt.h> 
#include <avr/sleep.h>
#include <avr/interrupt.h>

ISR (WDT_vect) 
{
PORTB = _BV(PB4);
_delay_us(100);
PORTB &=~_BV(PB4);
}

int main()
{
ADCSRA=0b11100011;
ADMUX=0x22;
DDRB=0b00010000;
PORTB |= _BV(PB4);//PCN
_delay_ms(100);
PORTB &=~_BV(PB4);
MCUCR=(1<<SM1);
MCUCR |= _BV(SE);
WDTCR=0x42;
WDTCR |= (1<<WDP2);
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sei();
while (1)
	{
	sleep_mode();
    sleep_cpu();
	}
}
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1802
Зарегистрирован: Ср сен 07, 2011 21:40:30

Сообщение Flasher »

Реклама
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

а сколько он будет потреблять если "собаку" не включать (знаю, что код работать не будет...)
ещё можно убавить частоту, для этого в майн (где настройки) добавь например:

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

// Crystal Oscillator division factor: 8
#pragma optsize-
CLKPR=0x80;
CLKPR=0x03;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Прорезались зубы
Сообщения: 238
Зарегистрирован: Сб янв 29, 2011 20:26:48

Сообщение king-live »

Эти все темы я просмотрел. У меня всё работает, только ток большой потребляет.
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

пока подозреваю в обжорстве _delay_us(100);
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Реклама
Прорезались зубы
Сообщения: 238
Зарегистрирован: Сб янв 29, 2011 20:26:48

Сообщение king-live »

Спасибо Ivanoff-iv я поэкспериментирую с таким кодом.

Добавлено after 56 seconds:
_delay_us(100)я убирал, нет не помогает

Добавлено after 3 minutes 29 seconds:
дописал код убавил частоту, не помогает так же 550мкА жрёт.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

возможно она у тебя не засыпает, попробуй закомментировать sleep_cpu(); для проверки, замерь ток...
Последний раз редактировалось Ivanoff-iv Чт янв 11, 2018 10:40:43, всего редактировалось 1 раз.
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18679
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Значит, так, в 100500-й раз рассказываю, что надо сделать для минимизации потребляемого тока в POWER_DOWN:
- отключить BOD
- отключить аналоговый компаратор, который после сброса всегда включен
- не оставлять пины портов в режиме входа без подтяжки, предпочтительно вообще перевести их в режим выхода и установить "безопасные" (для схемы) уровни
- помнить, что внешние резисторы схемы могут очень много тянуть на себя
- помнить, что WDT тоже кушает
- если есть регистр управления питанием периферии, отключать все, что можно с его помощью
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Прорезались зубы
Сообщения: 238
Зарегистрирован: Сб янв 29, 2011 20:26:48

Сообщение king-live »

Закомментировал, нет не помогает.

Добавлено after 2 minutes 19 seconds:
Хорошо AVR, попробую вырубить и настроить порты по другому.
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

поддерживаю ARV кроме ватчдога - он достаточно экономичен (~5мкА) пусть живет, раз нужен. другой вопрос, что этот таймер не очень точен.

Добавлено after 1 minute 2 seconds:
[uquote="king-live",url="/forum/viewtopic.php?p=3280226#p3280226"]Закомментировал, нет не помогает.[/uquote] а должно было усугубить...
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Прорезались зубы
Сообщения: 238
Зарегистрирован: Сб янв 29, 2011 20:26:48

Сообщение king-live »

а должно было усугубить...
Повысилось энергопотребление приблизительно на 20мка.

Добавлено after 18 minutes 36 seconds:
Нашёл!!!! Причина в настройках ADC. Закомментировал строчки работы с ADC и потребление тока упало до 9мкА при напряжении 4,6В. Теперь надо понять как отключать сами регистры ADC. Так как мне в проекте нужны и ADC и компаратор. Спасибо всем за помощь.
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

выход работает правильно? сигнал на нем какой надо? а то у собаки в режиме прерывания вроде надо флаг чистить WDTCR|=0x40; чтобы следующая сработка не ребутнула мк.
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Прорезались зубы
Сообщения: 238
Зарегистрирован: Сб янв 29, 2011 20:26:48

Сообщение king-live »

Всё работает правильно! Сигналы в норме.

Добавлено after 2 minutes 34 seconds:
есть такой регистр у Attiny13 (PRR – Power Reduction Register). Я никогда с ним не имел дела. Сейчас поэкспериментирую. Этот регистр как раз и работает с Timer и с ADC.
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

Чето не нашел нормального даташита на неё (посмотрел по тини13 там нет этого регистра, а на 13а только на 20-30 листов урезанные попадаются)
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Прорезались зубы
Сообщения: 238
Зарегистрирован: Сб янв 29, 2011 20:26:48

Сообщение king-live »

Вот файл более менее полный
Вложения
ATTINY13A.pdf
(4.18 МБ) 235 скачиваний
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

http://ww1.microchip.com/downloads/en/D ... oc8126.pdf Никакой тайны нет. Регистр PRR у ATtiny13A есть.
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

спасибо king-live.
а для чего у тебя аналоги задействованы?

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

ADCSRA=0b11100011;
ADMUX=0x22;
Добавлено after 6 minutes 52 seconds:
вторую ссылку посмотрел - такойже.
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Прорезались зубы
Сообщения: 238
Зарегистрирован: Сб янв 29, 2011 20:26:48

Сообщение king-live »

а для чего у тебя аналоги задействованы?
Пока контроллер спит, должен зарядиться конденсатор до определённого уровня. Когда контроллер просыпается то в основном схема работает от этого конденсатора. Вот задача дополнительная к этому контроллеру, чтобы проверял его заряд и разряд по времени. Если будет отклонение у этого конденсатора, то схема бракованная. Так как таких схем будет десятки тысяч в месяц, то и проверять их не возможно. А так контроллер сам будет выявлять отклонения у этого конденсатора и выдавать определённое сообщение на светодиод.
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

так их (АЦПшки) и надо включать только перед замерами, а на спячку отключать

Добавлено after 2 minutes 9 seconds:
другой вопрос, чем отключать PRR или ADCSRA или обоими сразу.
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Прорезались зубы
Сообщения: 238
Зарегистрирован: Сб янв 29, 2011 20:26:48

Сообщение king-live »

так их (АЦПшки) и надо включать только перед замерами, а на спячку отключать
Ну я так и сделал в обработчике.
другой вопрос, чем отключать PRR или ADCSRA или обоими сразу.
В даташите написано, что сначала надо отключать АЦП, а затем установить нужный бит в PRR регистр. Я так сделал, но разницы не ощутил в потреблении тока. Так что вопрос наверное знатокам. Где, в каких целях и как применять этот регистр PRR?
Ответить

Вернуться в «AVR»