Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по ATmega48V
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
H O--O K
Тактирую ATmega48V от часового кварца, питание 5В. Проблема в том, что потребление при данном режиме 750мкА. А по документации должно быть 15 мкА. Утечка через порты (они сконфигурены как входы) или сто-то ещё? Может что-то забыл настроить ещё? Подскажите кто вталкивался с такой проблемой.
Pyku_He_oTTyda
кОМПАРАТОР отключен?
smk
1) Порты сделай выходами.
2) Питай от 1,8 В. В любом случае не выше 3,6 В.
3) Используй режим Powerdown и Sleep в паузах во время работы порограммы. И вообще посмотри программу, возможно удастся сделать так чтоб он подольше спал. По вочдогу просыпается, делает что надо и опять засыпает.

P.S. Использование низких тактовых частот имеет ряд проблем и оправдано только тогда когда контроллер нельзя отправлять спать, да и то есть внешние прерывания. Одна из проблем связанна с невозможностью генерировать на ногах сигналы таймером с частотами больше Fтактовая / 16. При 32 кГц нельзя использовать АЦП. Fadc не менее 50 кГц... Так что в спячку его...

с учетом вышесказанного тут кое кто добивался 7,8 мкА на меге48.
CD_Eater
Цитата
невозможностью генерировать на ногах сигналы таймером с частотами больше Fтактовая / 16.

А где такое написано?
H O--O K
Цитата(smk @ Feb 28 2007, 02:55) *
1) Порты сделай выходами.
2) Питай от 1,8 В. В любом случае не выше 3,6 В.
3) Используй режим Powerdown и Sleep в паузах во время работы порограммы. И вообще посмотри программу, возможно удастся сделать так чтоб он подольше спал. По вочдогу просыпается, делает что надо и опять засыпает.

P.S. Использование низких тактовых частот имеет ряд проблем и оправдано только тогда когда контроллер нельзя отправлять спать, да и то есть внешние прерывания. Одна из проблем связанна с невозможностью генерировать на ногах сигналы таймером с частотами больше Fтактовая / 16. При 32 кГц нельзя использовать АЦП. Fadc не менее 50 кГц... Так что в спячку его...

с учетом вышесказанного тут кое кто добивался 7,8 мкА на меге48.


С портами попробую. Питание... что сним делать? В даташите не сказано, что это только при пониженном питании у него на такой частоте потребление 15 мкА. В спячку его нельзя, он постоянно выполняет рабочий цикл. И потом, по тому же даташиту, 15 мкА - это ток потребления в активном режиме. Частота такая выбрана потому, что там не АЦП не нужен, ни скорость высокая. А питания на весь девайс 1 мА.
smk
Цитата
А где такое написано?


Нигде не написано. Просто компилятор компилирует код программы так, что для работы с таймером требуется 16 тактов.
Например:

TCNT0 = 0xF9;
while (1)
{
if (TIFR0 & 0x02)
{

TCNT0 = 0xF9;
TIFR0 = 0x02;
PORTB.0 = !PORTB.0;

}
}

попробуйте кому интересно.

Цитата
В даташите не сказано, что это только при пониженном питании у него на такой частоте потребление 15 мкА.


Да. Написано. В случае когда не выполняется никакой программы. А стоит начать делать ну хотябы вышеприведенный цикл - потребление возрастает. Потребление тока зависит от числа переключений внутри.
Dopler
Совсем недавно эти вопросы обсасывались до костей:
http://electronix.ru/forum/index.php?showtopic=25453&hl=
http://electronix.ru/forum/lofiversion/index.php/t26461.html
CD_Eater
smk, спасибо, поржал smile.gif
Мне бы и в голову не пришла мысль именно так генерировать меандр smile.gif
SasaVitebsk
Цитата(CD_Eater @ Feb 28 2007, 15:23) *
smk, спасибо, поржал smile.gif
Мне бы и в голову не пришла мысль именно так генерировать меандр smile.gif


smile.gif

Да. Мне тоже.

Ну мне кажется, что на ЯВЕ будет все 25.

Утечка ч/з порты всётаки копейки. Необходимо переферию лишнюю поодключать и программу перелопатить с целью оптимизации и сна.

В М48, по моему можно от внутреннего RC генератора запустить на 128кГц. Со сном, возможно будет меньше потреблять чем от 32 без сна.
smk
Цитата
smk, спасибо, поржал
Мне бы и в голову не пришла мысль именно так генерировать меандр


А как? ШИМ? Не очень то интересно...

Предлагайте... я на звание "супер спеца" не претендую. С удовольствием поучусь.
rx3apf
Цитата(H O--O K @ Feb 28 2007, 07:28) *
С портами попробую. Питание... что сним делать? В даташите не сказано, что это только при пониженном питании у него на такой частоте потребление 15 мкА. В спячку его нельзя, он постоянно выполняет рабочий цикл. И потом, по тому же даташиту, 15 мкА - это ток потребления в активном режиме. Частота такая выбрана потому, что там не АЦП не нужен, ни скорость высокая. А питания на весь девайс 1 мА.

Есть еще хороший и удобный вариант - от 32kHz тактировать Timer2 в асинхронном режиме, по прерыванию переполнения просыпаться и работать на встроенном RC. Экономично и нет проблем, когда в каком-то месте нужно иметь более-менее приличную скорость обработки.

Цитата(SasaVitebsk @ Feb 28 2007, 14:39) *
Утечка ч/з порты всётаки копейки. Необходимо переферию лишнюю поодключать и программу перелопатить с целью оптимизации и сна.

В М48, по моему можно от внутреннего RC генератора запустить на 128кГц. Со сном, возможно будет меньше потреблять чем от 32 без сна.

Сотни uA из-за болтающихся входов - легко. Особенно если потребление плавает при поднесении руки.
H O--O K
Порты сконфигурил как выходы, после этого потребление с 700мкА уменьшилось до 100 мкА. Отключил таймер, компаратор, контроллер ничё не делает. В этом состоянии потребление 70 мкА... Включение (отключение) DebugWIRE ничего не даёт ни в плюс ни в минус. Многовато всё же 100 мкА... sad.gif
smk
Цитата
Да. Мне тоже.

Ну мне кажется, что на ЯВЕ будет все 25.


Да, кстати. 25 и есть.
Так научите как правильно или только смеяться будете?

Цитата
Многовато всё же 100 мкА...


Питание 1,8 В сделай. Поможет.
CD_Eater
Цитата(smk @ Feb 28 2007, 16:37) *
Так научите как правильно или только смеяться будете?
Почитай про режимы работы таймера. Они именно для этого и предназначены. Вообще, даташит - полезнейшая вещь. Если сложности с английским - на гав.ру лежит русское описание меги128 (перевод ДШ), а поскольку все таймеры на разных АВРках похожи как китайцы друг на друга, то описание с незначительными исправлениями подойдёт практически под любой АВР.
smk
Цитата
Почитай про режимы работы таймера. Они именно для этого и предназначены. Вообще, даташит - полезнейшая вещь. Если сложности с английским - на гав.ру лежит русское описание меги128 (перевод ДШ), а поскольку все таймеры на разных АВРках похожи как китайцы друг на друга, то описание с незначительными исправлениями подойдёт практически под любой АВР.


Конечно почитаю. Но вопрос был в том как делаете Вы и почему считаете что так лучше...
prottoss
Кстати, по поводу таймера - это ведь тоже железяка и, при переключении, потребляет относительно нехилый ток, щелкая триггерами smile.gif .

Если в проекте используется какой либо таймер МК (не watchdog)
Если МК тактируется от watchdog-a
Если есть возможность использовать прерывание по переполнению watchdog-a
Если...
Может быть возможно исключить таймер из проекта? Вот smile.gif



Упс... Пардон, пропустил, что МК от часового кварца тактируется...
rx3apf
Цитата(H O--O K @ Feb 28 2007, 16:31) *
Порты сконфигурил как выходы, после этого потребление с 700мкА уменьшилось до 100 мкА. Отключил таймер, компаратор, контроллер ничё не делает. В этом состоянии потребление 70 мкА... Включение (отключение) DebugWIRE ничего не даёт ни в плюс ни в минус. Многовато всё же 100 мкА... sad.gif

Многовато. Я, правда, никогда не пробовал на столь низких частотах в активном режиме (помню, у 90S были проблемы - они даже в статике без тактирования в активном режиме жрали прилично), а вот в sleep при включенном осцилляторе второго таймера и питании 3.6V у меня жрало меньше 15 uA, при том, что прерывание 16 раз в секунду и опрос датчиков. Без опроса, вроде было 10-12 uA.

Загоняй в sleep, смотри потребление.
Dopler
Цитата(smk @ Feb 28 2007, 09:22) *
Нигде не написано. Просто компилятор компилирует код программы так, что для работы с таймером требуется 16 тактов.
Например:

TCNT0 = 0xF9;
while (1)
{
if (TIFR0 & 0x02)
{

TCNT0 = 0xF9;
TIFR0 = 0x02;
PORTB.0 = !PORTB.0;

}
}

попробуйте кому интересно.


Да что тут предлагать-то.
1. У mega48 (как и у всех остальных мег) у каждого таймера есть режим CTC (Clear To Compare), при котором счетчик сам обнуляется, когда досчитает до заданного числа (строка TCNT0 = 0xF9; уходит).
2. В этом же режиме можно инвертировать определенные выходы (обычно по два на каждый таймер).

Попробуйте откомпилить приведенный вами код для таймера2, увидите 32 цикла процессора вместо ожидаемых 16 (не точно 32 но точно больше 16), угадайте почему?
smk
Цитата
Да что тут предлагать-то.
1. У mega48 (как и у всех остальных мег) у каждого таймера есть режим CTC (Clear To Compare), при котором счетчик сам обнуляется, когда досчитает до заданного числа (строка TCNT0 = 0xF9; уходит).
2. В этом же режиме можно инвертировать определенные выходы (обычно по два на каждый таймер).

Попробуйте откомпилить приведенный вами код для таймера2, увидите 32 цикла процессора вместо ожидаемых 16 (не точно 32 но точно больше 16), угадайте почему?


Все это я знаю и понимаю, но когда нужно генерировать не просто меандр, ка скажем 5 периодов с частотй 1 кГц, а потом вывод сделать высокоимпедансным, то не вижу я иных вариантов... если есть идеи - буду рад пополнить копилку...
CD_Eater
Цитата
нужно генерировать не просто меандр, а скажем 5 периодов с частотй 1 кГц, а потом вывод сделать высокоимпедансным
таймер генерит меандр, а CPU считает циклы и отключает выход. Если есть второй свободный таймер, то отключить выход первого таймера можно из обработчика прерывания второго (через заранее вычисленное время) - при этом CPU всё время свободен
SasaVitebsk
Цитата(smk @ Feb 28 2007, 23:29) *
Все это я знаю и понимаю, но когда нужно генерировать не просто меандр, ка скажем 5 периодов с частотй 1 кГц, а потом вывод сделать высокоимпедансным, то не вижу я иных вариантов... если есть идеи - буду рад пополнить копилку...


Ну скважность 5 можно и ШИМом получить. smile.gif

Да мы не смеёмся, - мы просто улыбаемся. Беззлобно.
Дело не в том как именно ты делаешь, а дело в том, что по этому поводу сложно делать обобщения и выводы. Так как схемная реализация предполагает чёткий результат, а программная целиком зависит от мастерства автора, применённого компилятора и направления ветра. smile.gif

Мы тут такие варианты наблюдали недавно в преобразовании числа в семисегментный - закачаешься. Всё ч/з If. Более линейной программы я в жизни не видел. Да и светодиодом моргают на пол-листа ч/з раз, - но это же не значит, что я на частоте 32к не смогу им моргать с частотой 1 Гц к примеру.

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