реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> RTC в ATmega, Power-save
zombi
сообщение Dec 27 2010, 15:46
Сообщение #1


Гуру
******

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



Никогда ранее не использовал режимы пониженного потребления в AVR, а сейчас возникла необходимость в счетчике реального времени.
Помогите разобраться что к чему:
Как я понял нужно подключить к ногам TOSC1 и TOSC2 кварцевый резонатор на 32.768kHz и запитать проц от батарейки.
Настроить прерывание раз в секунду и просто инкрементировать 32-х битный счетчик в озу процессора.
При этом чтобы реализовать счет времени при отключеном внешнем питании процессор должен
обязательно тактироваться от внешнего или внутреннего резонатора но ни как не от внешнего генератора?
Go to the top of the page
 
+Quote Post
Diusha
сообщение Dec 27 2010, 23:19
Сообщение #2


Вечный студент
****

Группа: Участник
Сообщений: 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 лет
Зачем так много?
Go to the top of the page
 
+Quote Post
777777
сообщение Dec 28 2010, 05:00
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 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) *
При этом чтобы реализовать счет времени при отключеном внешнем питании процессор должен
обязательно тактироваться от внешнего или внутреннего резонатора но ни как не от внешнего генератора?

Ну почему никак? Если найдете генератор, работающий от батарейки длительное время, то какие проблемы?
Go to the top of the page
 
+Quote Post
zombi
сообщение Dec 28 2010, 08:42
Сообщение #4


Гуру
******

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



Цитата(777777 @ Dec 28 2010, 11:00) *
Ну почему никак? Если найдете генератор, работающий от батарейки длительное время, то какие проблемы?

Боюсь из ширпотреба такой врядли найду, а с экзотикой связываться не хочется.
Обычно у генераторов потребление в пределах 5-20 ma.

32-х разрядный счетчик для уменьшения времени обработки 1сек прерывания.
А распаковкой заниматься при наличии основного питания.
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Dec 28 2010, 10:02
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 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, вариантах). И еще надо грамотно реализовать переход на резервное питание.
Go to the top of the page
 
+Quote Post
zombi
сообщение Dec 28 2010, 10:28
Сообщение #6


Гуру
******

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



Цитата(rx3apf @ Dec 28 2010, 17:02) *
200+ тактов при тактовой 8 MHz, раньше выйти нельзя.

Ну да, в таком случае действительно экономить нечего.

А можно ли както сделать так чтоб при отсутсвии основного питания проц тактировался от внутреннего RC ну или от чегото другого малопотребляющего,
а при подаче питания от внешнего генератора?

Go to the top of the page
 
+Quote Post
777777
сообщение Dec 28 2010, 10:29
Сообщение #7


Профессионал
*****

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



Цитата(rx3apf @ Dec 28 2010, 16:02) *
Из прерывания нельзя выходить раньше 1/32768 sec.

Это еще что за предрассудки? Нельзя ли цитату из даташита? А то у меня в часах обработка прерывания существенно меньше 30 мкс, а никаких приблем я не заметил.
Go to the top of the page
 
+Quote Post
zombi
сообщение Dec 28 2010, 10:43
Сообщение #8


Гуру
******

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



Цитата(777777 @ Dec 28 2010, 17:29) *
Это еще что за предрассудки? Нельзя ли цитату из даташита? А то у меня в часах обработка прерывания существенно меньше 30 мкс, а никаких приблем я не заметил.

Код
• 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. Вот тут вроде об этом речь? Но я в англицком не силен. Это оно или нет?
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Dec 28 2010, 14:18
Сообщение #9


Гуру
******

Группа: Участник
Сообщений: 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 - вполне даже нормально. В конце концов, если в режиме батарейного питания нужны только часы - взять готовый чип.
Go to the top of the page
 
+Quote Post
algidim
сообщение Dec 29 2010, 09:21
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 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 на конце, у него расширенный диапазон питающего напряжения. Так что если вам это интересно – разберетесь, примеров полно !



Go to the top of the page
 
+Quote Post
rx3apf
сообщение Dec 29 2010, 09:37
Сообщение #11


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(algidim @ Dec 29 2010, 15:21) *
Почему нет ? Например в Amega48,88,8 и многих других есть внутренний генератор на 8 мГц.

_Генератор_.
Цитата
Все очень просто AVR тактируется именно от внутреннего кварцевого резонатора.

_Резонатор_. Разницу не чувствуете ? Ну, тогда поищите этот самый "внутренний резонатор" в даташите. Производитель, наверное, очень удивился бы...


Go to the top of the page
 
+Quote Post
algidim
сообщение Dec 29 2010, 10:12
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 160
Регистрация: 5-04-06
Из: Москва
Пользователь №: 15 847



Цитата(rx3apf @ Dec 29 2010, 15:37) *
_Генератор_.

_Резонатор_. Разницу не чувствуете ? Ну, тогда поищите этот самый "внутренний резонатор" в даташите. Производитель, наверное, очень удивился бы...

Да я забыл biggrin.gif
Mega у меня тактируется от встроенного генератора с внутренней RC цепочкой на 8 мГц и включен делитель на 8. И того 1 мГц А резонатор – это просто кварц !

Сообщение отредактировал algidim - Dec 29 2010, 10:13
Go to the top of the page
 
+Quote Post
xelax
сообщение Dec 30 2010, 04:49
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 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 мкА.

А вообще тумана в этой теме нагнали..... Если бы я не знал очём идёт речь, то решил бы что всё жутко сложно.
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Dec 30 2010, 06:12
Сообщение #14


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(xelax @ Dec 30 2010, 10:49) *
Здесь же речь идёт о том, что нельзя сразу же повторно входить в режим сна, после просыпания. Необходимо дать время асинхронной логике обработки прерывания сброситься и для этого рекоммендуют записать данные в асинхронный регистр и подождать пока они там окажуться. И нет не слова о том чтобы сидеть всё это время в прерывании. Можно вообще ничего не ждать дополнительно, если сразу же засыпать не собираетесь.

Да, разумеется, это так. Но обсуждался именно режим, когда процессор все время спит и просыпается лишь по прерыванию таймера. Типично после выхода в этом случае все равно опять sleep.



Go to the top of the page
 
+Quote Post
algidim
сообщение Dec 30 2010, 06:26
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 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, естественно зависит от напряжения питания. Задача то тривиальная, нужно только желание чтобы её решить.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th June 2025 - 20:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01546 секунд с 7
ELECTRONIX ©2004-2016