|
RTC в ATmega, Power-save |
|
|
|
Dec 27 2010, 23:19
|
Вечный студент
   
Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262

|
Цитата(zombi @ Dec 27 2010, 21:46)  При этом чтобы реализовать счет времени при отключеном внешнем питании процессор должен обязательно тактироваться от внешнего или внутреннего резонатора но ни как не от внешнего генератора? Что Вы называете внутренним резонатором? У AVR такого нет. Может внутренний RC-осциллятор? Для меньшего потребления хорошо бы использовать его, 128 кГц, но в том случае, если точность тактовой не важна (точные интервалы задаются часовым кварцем). Противопоказаний против внешнего генератора не вижу. Цитата(zombi @ Dec 27 2010, 21:46)  Настроить прерывание раз в секунду и просто инкрементировать 32-х битный счетчик в озу процессора. Раз в секунду, 32-х битный... 2^32 = 4294967296 сек = 136 лет Зачем так много?
|
|
|
|
|
Dec 28 2010, 05:00
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(zombi @ Dec 27 2010, 21:46)  Как я понял нужно подключить к ногам TOSC1 и TOSC2 кварцевый резонатор на 32.768kHz и запитать проц от батарейки. Настроить прерывание раз в секунду и просто инкрементировать 32-х битный счетчик в озу процессора. У него есть прескалер на 128. Если его включить, то переполнения будут происходить каждую секунду: 128*256 = 32768 А почему обязательно 32-битный? Это уж как удобно, можно отдельно инкрементировать байт с секундами, при достижении 60 инкрементиоровать минуты и т.д. А в остальное время находиться в power save mode. Цитата(zombi @ Dec 27 2010, 21:46)  При этом чтобы реализовать счет времени при отключеном внешнем питании процессор должен обязательно тактироваться от внешнего или внутреннего резонатора но ни как не от внешнего генератора? Ну почему никак? Если найдете генератор, работающий от батарейки длительное время, то какие проблемы?
|
|
|
|
|
Dec 28 2010, 08:42
|

Гуру
     
Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106

|
Цитата(777777 @ Dec 28 2010, 11:00)  Ну почему никак? Если найдете генератор, работающий от батарейки длительное время, то какие проблемы? Боюсь из ширпотреба такой врядли найду, а с экзотикой связываться не хочется. Обычно у генераторов потребление в пределах 5-20 ma. 32-х разрядный счетчик для уменьшения времени обработки 1сек прерывания. А распаковкой заниматься при наличии основного питания.
|
|
|
|
|
Dec 28 2010, 10:02
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(zombi @ Dec 28 2010, 14:42)  Боюсь из ширпотреба такой врядли найду, а с экзотикой связываться не хочется. Обычно у генераторов потребление в пределах 5-20 ma. Вот и противопоказание к использованию внешнего. А внутренний - RC, конечно, менее точный (если вдруг критично), зато не тратит время на "разгон" (как кварц). Цитата 32-х разрядный счетчик для уменьшения времени обработки 1сек прерывания. А распаковкой заниматься при наличии основного питания. Обратите внимание на особенности работы таймера в асинхронном режиме. Из прерывания нельзя выходить раньше 1/32768 sec. В случае тактирования системного тактового генератора от кварца это некритично (он типично дольше "разгоняется"), а вот в случае RC - рекомендую ОЧЕНЬ внимательно почитать раздел, связанный с этими особенностями. И времени, кстати, на обработку "настоящего" RTC там будет вагон (200+ тактов при тактовой 8 MHz, раньше выйти нельзя). И потребление мизерное, даже если не то что раз в секунду, а хоть бы и 16 раз в секунду, работающий опорник сам по себе больше жрет (в старых, не A/PA, вариантах). И еще надо грамотно реализовать переход на резервное питание.
|
|
|
|
|
Dec 28 2010, 14:18
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(zombi @ Dec 28 2010, 16:43)  Курил DS. Вот тут вроде об этом речь? Но я в англицком не силен. Это оно или нет? Да, оно самое. И для переполнения и для OC. Пренеприятнейшая вещь.... Цитата(zombi @ Dec 28 2010, 16:28)  А можно ли както сделать так чтоб при отсутсвии основного питания проц тактировался от внутреннего RC ну или от чегото другого малопотребляющего, а при подаче питания от внешнего генератора? Нельзя, к тому же у AVR есть ограничение на скорость изменения тактовой частоты. Ну, RC тоже неплохой вариант, его можно откалибровать по часовому и, при желании, подстраивать. Для прецизионных измерений непригодно, а вот для корректной работы UART - вполне даже нормально. В конце концов, если в режиме батарейного питания нужны только часы - взять готовый чип.
|
|
|
|
|
Dec 29 2010, 09:21
|
Частый гость
 
Группа: Участник
Сообщений: 160
Регистрация: 5-04-06
Из: Москва
Пользователь №: 15 847

|
Цитата(Diusha @ Dec 28 2010, 05:19)  Что Вы называете внутренним резонатором? У AVR такого нет. Может внутренний RC-осциллятор? Для меньшего потребления хорошо бы использовать его, 128 кГц, но в том случае, если точность тактовой не важна (точные интервалы задаются часовым кварцем). Противопоказаний против внешнего генератора не вижу. Почему нет ? Например в Amega48,88,8 и многих других есть внутренний генератор на 8 мГц. Все очень просто AVR тактируется именно от внутреннего кварцевого резонатора. Внешний резонатор 32678 Гц (часовой) используется для работы таймера 2 в асинхронном режиме. Таймер2 формирует прерывание раз в 1 сек, в этом прерывании инкрементируете необходимые переменные в ОЗУ, делаете то что вам нужно и переходите в режим Pover Save. Мне нужно было для прибора делать дешевые часы и с дополнительными функциями, который выполняет Atmega. Читает время из неё основной контроллер по i2c. Вообщем получился аналог RTC с дополнительными функциями. Ток потребления у меня получился 8 мка. Контроллер лучше брать с буквой V на конце, у него расширенный диапазон питающего напряжения. Так что если вам это интересно – разберетесь, примеров полно !
|
|
|
|
|
Dec 29 2010, 09:37
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(algidim @ Dec 29 2010, 15:21)  Почему нет ? Например в Amega48,88,8 и многих других есть внутренний генератор на 8 мГц. _Генератор_. Цитата Все очень просто AVR тактируется именно от внутреннего кварцевого резонатора. _Резонатор_. Разницу не чувствуете ? Ну, тогда поищите этот самый "внутренний резонатор" в даташите. Производитель, наверное, очень удивился бы...
|
|
|
|
|
Dec 29 2010, 10:12
|
Частый гость
 
Группа: Участник
Сообщений: 160
Регистрация: 5-04-06
Из: Москва
Пользователь №: 15 847

|
Цитата(rx3apf @ Dec 29 2010, 15:37)  _Генератор_.
_Резонатор_. Разницу не чувствуете ? Ну, тогда поищите этот самый "внутренний резонатор" в даташите. Производитель, наверное, очень удивился бы... Да я забыл Mega у меня тактируется от встроенного генератора с внутренней RC цепочкой на 8 мГц и включен делитель на 8. И того 1 мГц А резонатор – это просто кварц !
Сообщение отредактировал algidim - Dec 29 2010, 10:13
|
|
|
|
|
Dec 30 2010, 04:49
|

Местный
  
Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035

|
Цитата(zombi @ Dec 28 2010, 16:43)  Код • If Timer/Counter2 is used to wake the device up from Power-save or Extended Standby mode, precautions must be taken if the user wants to re-enter one of these modes: The interrupt logic needs one TOSC1 cycle to be reset. If the time between wake-up and re-entering sleep mode is less than one TOSC1 cycle, the interrupt will not occur, and the device will fail to wake up. If the user is in doubt whether the time before re-entering Power-save or Extended Standby mode is sufficient, the following algorithm can be used to ensure that one TOSC1 cycle has elapsed: 1. Write a value to TCCR2, TCNT2, or OCR2. 2. Wait until the corresponding Update Busy Flag in ASSR returns to zero. 3. Enter Power-save or Extended Standby mode. Курил DS. Вот тут вроде об этом речь? Но я в англицком не силен. Это оно или нет? Здесь же речь идёт о том, что нельзя сразу же повторно входить в режим сна, после просыпания. Необходимо дать время асинхронной логике обработки прерывания сброситься и для этого рекоммендуют записать данные в асинхронный регистр и подождать пока они там окажуться. И нет не слова о том чтобы сидеть всё это время в прерывании. Можно вообще ничего не ждать дополнительно, если сразу же засыпать не собираетесь. Менять источник тактирования mcu в атмеге на лету нельзя, смиритесь. Единственное что можно сделать это понизить делителями тактовую, снять тактовую с неиспользуемых переферийных узлов и в рабочем режиме постоянно, находиться в IDLE, вместо суперпетли или планировщика (в случае ОС). Закончив обработку основных алгоритмов, сваливаться в power-save. Если на вашем девайсе есть что-нибудь, что может дать пинка mcu для просыпания, то можно даже в power-down уходить. У меня получилось добиться в power-save 6 мкА, в power-down <1 мкА. А вообще тумана в этой теме нагнали..... Если бы я не знал очём идёт речь, то решил бы что всё жутко сложно.
|
|
|
|
|
Dec 30 2010, 06:26
|
Частый гость
 
Группа: Участник
Сообщений: 160
Регистрация: 5-04-06
Из: Москва
Пользователь №: 15 847

|
Цитата(xelax @ Dec 30 2010, 10:49)  Здесь же речь идёт о том, что нельзя сразу же повторно входить в режим сна, после просыпания. Необходимо дать время асинхронной логике обработки прерывания сброситься и для этого рекоммендуют записать данные в асинхронный регистр и подождать пока они там окажуться. И нет не слова о том чтобы сидеть всё это время в прерывании. Можно вообще ничего не ждать дополнительно, если сразу же засыпать не собираетесь.
Менять источник тактирования mcu в атмеге на лету нельзя, смиритесь. Единственное что можно сделать это понизить делителями тактовую, снять тактовую с неиспользуемых переферийных узлов и в рабочем режиме постоянно, находиться в IDLE, вместо суперпетли или планировщика (в случае ОС). Закончив обработку основных алгоритмов, сваливаться в power-save. Если на вашем девайсе есть что-нибудь, что может дать пинка mcu для просыпания, то можно даже в power-down уходить.
У меня получилось добиться в power-save 6 мкА, в power-down <1 мкА.
А вообще тумана в этой теме нагнали..... Если бы я не знал очём идёт речь, то решил бы что всё жутко сложно. Полностью согласен Понаписали какую то ересть, похоже тут всетаки в основном теоретики. Да и зачем Вам на лету менять источник тактирования ? Cмысла нет, так как чем частота генератора выше, тем быстрее проц выполнит основную задачу и войдет в режим сна, соответственно средний ток будет примерно одинаковым. Единственное, при 8 мГц мгновенное потребление тока естественно выше, чем от 1 Мгц, а средний ток примерно одинаковым. И по поводу потребления тока подтверждаю у меня тож гдето 6 – 8 мкА при режиме power-save, естественно зависит от напряжения питания. Задача то тривиальная, нужно только желание чтобы её решить.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|