|
Вопрос по ATmega48V, потребление |
|
|
|
Feb 27 2007, 22:20
|
Участник

Группа: Участник
Сообщений: 24
Регистрация: 10-03-05
Из: город N
Пользователь №: 3 200

|
Тактирую ATmega48V от часового кварца, питание 5В. Проблема в том, что потребление при данном режиме 750мкА. А по документации должно быть 15 мкА. Утечка через порты (они сконфигурены как входы) или сто-то ещё? Может что-то забыл настроить ещё? Подскажите кто вталкивался с такой проблемой.
|
|
|
|
2 страниц
< 1 2
|
 |
Ответов
(15 - 20)
|
Feb 28 2007, 18:42
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Кстати, по поводу таймера - это ведь тоже железяка и, при переключении, потребляет относительно нехилый ток, щелкая триггерами  . Если в проекте используется какой либо таймер МК (не watchdog) Если МК тактируется от watchdog-a Если есть возможность использовать прерывание по переполнению watchdog-a Если... Может быть возможно исключить таймер из проекта? Вот Упс... Пардон, пропустил, что МК от часового кварца тактируется...
--------------------
|
|
|
|
|
Feb 28 2007, 18:45
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(H O--O K @ Feb 28 2007, 16:31)  Порты сконфигурил как выходы, после этого потребление с 700мкА уменьшилось до 100 мкА. Отключил таймер, компаратор, контроллер ничё не делает. В этом состоянии потребление 70 мкА... Включение (отключение) DebugWIRE ничего не даёт ни в плюс ни в минус. Многовато всё же 100 мкА...  Многовато. Я, правда, никогда не пробовал на столь низких частотах в активном режиме (помню, у 90S были проблемы - они даже в статике без тактирования в активном режиме жрали прилично), а вот в sleep при включенном осцилляторе второго таймера и питании 3.6V у меня жрало меньше 15 uA, при том, что прерывание 16 раз в секунду и опрос датчиков. Без опроса, вроде было 10-12 uA. Загоняй в sleep, смотри потребление.
|
|
|
|
|
Feb 28 2007, 22:07
|
Местный
  
Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425

|
Цитата(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), угадайте почему?
|
|
|
|
|
Feb 28 2007, 22:29
|
Гуру
     
Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446

|
Цитата Да что тут предлагать-то. 1. У mega48 (как и у всех остальных мег) у каждого таймера есть режим CTC (Clear To Compare), при котором счетчик сам обнуляется, когда досчитает до заданного числа (строка TCNT0 = 0xF9; уходит). 2. В этом же режиме можно инвертировать определенные выходы (обычно по два на каждый таймер).
Попробуйте откомпилить приведенный вами код для таймера2, увидите 32 цикла процессора вместо ожидаемых 16 (не точно 32 но точно больше 16), угадайте почему? Все это я знаю и понимаю, но когда нужно генерировать не просто меандр, ка скажем 5 периодов с частотй 1 кГц, а потом вывод сделать высокоимпедансным, то не вижу я иных вариантов... если есть идеи - буду рад пополнить копилку...
--------------------
Живи днем так, чтобы ночью ты спал спокойно.
|
|
|
|
|
Feb 28 2007, 23:05
|
Частый гость
 
Группа: Новичок
Сообщений: 173
Регистрация: 3-09-04
Из: Moscow
Пользователь №: 595

|
Цитата нужно генерировать не просто меандр, а скажем 5 периодов с частотй 1 кГц, а потом вывод сделать высокоимпедансным таймер генерит меандр, а CPU считает циклы и отключает выход. Если есть второй свободный таймер, то отключить выход первого таймера можно из обработчика прерывания второго (через заранее вычисленное время) - при этом CPU всё время свободен
|
|
|
|
|
Feb 28 2007, 23:09
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(smk @ Feb 28 2007, 23:29)  Все это я знаю и понимаю, но когда нужно генерировать не просто меандр, ка скажем 5 периодов с частотй 1 кГц, а потом вывод сделать высокоимпедансным, то не вижу я иных вариантов... если есть идеи - буду рад пополнить копилку... Ну скважность 5 можно и ШИМом получить. Да мы не смеёмся, - мы просто улыбаемся. Беззлобно. Дело не в том как именно ты делаешь, а дело в том, что по этому поводу сложно делать обобщения и выводы. Так как схемная реализация предполагает чёткий результат, а программная целиком зависит от мастерства автора, применённого компилятора и направления ветра.  Мы тут такие варианты наблюдали недавно в преобразовании числа в семисегментный - закачаешься. Всё ч/з If. Более линейной программы я в жизни не видел. Да и светодиодом моргают на пол-листа ч/з раз, - но это же не значит, что я на частоте 32к не смогу им моргать с частотой 1 Гц к примеру. Некоторые - не смогут, но это не выдержка из даташита.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|