Например TDA7294

Форум РадиоКот • Просмотр темы - пробуждение atmega8 при переполнении TCNT0
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Чт фев 26, 2026 13:17:19

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 17 ] 
Автор Сообщение
 Заголовок сообщения: пробуждение atmega8 при переполнении TCNT0
СообщениеДобавлено: Сб янв 19, 2013 21:40:40 
Родился

Зарегистрирован: Пн янв 07, 2013 16:56:30
Сообщений: 14
Рейтинг сообщения: 0
Прошу помощи, так как лазанье по просторам инета не помогло, уже голова дымится, а толку нет, написал программу для снятия 2х датчиков температуры, и сохранением их в внешний eeprom с текущим реальным временем. В общем нужен простой логгер. Но застрял на пробуждении.
Ситуация такова что по переполнению счетчика TCNT0, который по идее тактируется через ногу T0 и частотой 1ГЦ, микропроцессор должен выходить из сна каждые 10 (или около того)минут и считывать данные с последующим их сохранением и обратно уходить в сон, так как питание задумано от батареек.
Задача вроде не сложная но не могу нигде найти рабочего примера как это сделать, создать с нуля не хватает ума, так как начинающий.
Если вдруг кто то может подсказать буду очень благодарен.


Вложения:
Комментарий к файлу: схема
shema.jpg [59.25 KiB]
Скачиваний: 1304
shema.jpg [59.25 KiB]
Скачиваний: 611
Вернуться наверх
 
 Заголовок сообщения: Re: пробуждение atmega8 при переполнении TCNT0
СообщениеДобавлено: Вс янв 20, 2013 08:35:50 
Поставщик валерьянки для Кота

Карма: 16
Рейтинг сообщений: 329
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Сообщений: 2222
Откуда: Tashkent
Рейтинг сообщения: 0
Сможем подсказать только после просмотра кода программы. Ну и как предположение - вы используете слишком глубокий сон, в котором отключена синхронизация TIM0.


Вложения:
sleep.JPG [43.96 KiB]
Скачиваний: 386
Вернуться наверх
 
 Заголовок сообщения: Re: пробуждение atmega8 при переполнении TCNT0
СообщениеДобавлено: Вс янв 20, 2013 08:39:11 
Поставщик валерьянки для Кота

Карма: 16
Рейтинг сообщений: 329
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Сообщений: 2222
Откуда: Tashkent
Рейтинг сообщения: 0
И еще если я не ошибаюсь, то выхот SOUT у DS1307 типа Открытый коллектор, подтяжки не хватает.


Вернуться наверх
 
 Заголовок сообщения: Re: пробуждение atmega8 при переполнении TCNT0
СообщениеДобавлено: Вс янв 20, 2013 11:15:33 
Родился

Зарегистрирован: Пн янв 07, 2013 16:56:30
Сообщений: 14
Рейтинг сообщения: 0
Если все что в основном коде я брал из рабочих проектов ( как положено начинающему) и переделывал под себя, то в плане регистров все уже по статьям, так как примеров не нашел, в общем как и ожидалось микроконтроллер по истичению 10 секунд не просыпается.
вот блок засыпания:

// ----сон---------

TIMSK |= (1<<TOIE0); // разрешить прерывание по переполнению таймера счетчика TCCR0
TCCR0 = (1<<CS02)|(1<<CS01)|(1<<CS00); // устанавливаем отсчет по синхроимпульсу на T0
// TCNT0 = 64936; // до переполнения 600 тактов в нашем случае 600 секунд или 10 минут
TCNT0 = 65526; // до переполнения 10 тактов в нашем случае 10 секунд
GICR|=0x40; //включить INT0
//MCUCR=0x80; // idle mode
//MCUCR=0xA0; //power down mode
MCUCR=0xB0; // power save mode только в этом режиме можно проснутся по переполнению
//MCUCR=0xE0;; // standby mode
GIFR=0x40;

#asm("sei") //Глобальное разрешение прерываний.
#asm("sleep") //Отправляем контроллер в спящий режим
#asm("cli")
delay_ms(100); //просыпаемся
//----------


Что не верно?

Странно в MCUCR=0xA0; //power down mode работает как задумано.


Последний раз редактировалось mvn77 Вс янв 20, 2013 11:28:52, всего редактировалось 1 раз.

Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
 Заголовок сообщения: Re: пробуждение atmega8 при переполнении TCNT0
СообщениеДобавлено: Вс янв 20, 2013 11:25:54 
Друг Кота

Карма: 33
Рейтинг сообщений: 213
Зарегистрирован: Ср окт 14, 2009 10:37:49
Сообщений: 3956
Откуда: Украина
Рейтинг сообщения: 0
mvn77 писал(а):
TCNT0 = 65526; // до переполнения 10 тактов в нашем случае 10 секунд
----------
Что не верно?

The Timer/Counter (TCNT0) is an 8-bit register


Вернуться наверх
 
 Заголовок сообщения: Re: пробуждение atmega8 при переполнении TCNT0
СообщениеДобавлено: Вс янв 20, 2013 11:52:56 
Родился

Зарегистрирован: Пн янв 07, 2013 16:56:30
Сообщений: 14
Рейтинг сообщения: 0
точно блин - косяк. Получается что максимальный интервал это 256 секунд?


Вернуться наверх
 
 Заголовок сообщения: Re: пробуждение atmega8 при переполнении TCNT0
СообщениеДобавлено: Вс янв 20, 2013 11:56:46 
Родился

Зарегистрирован: Пн янв 07, 2013 16:56:30
Сообщений: 14
Рейтинг сообщения: 0
uk8amk писал(а):
И еще если я не ошибаюсь, то выхот SOUT у DS1307 типа Открытый коллектор, подтяжки не хватает.

Спасибо - исправил!
Может подскажите как правильно уложить спасть в режиме MCUCR=0xA0; //power down mode, я имею ввиду перевести порты чтобы утечек не было и отключить АЦП, может еще какие нюансы есть при питании от батареек.


Вернуться наверх
 
 Заголовок сообщения: Re: пробуждение atmega8 при переполнении TCNT0
СообщениеДобавлено: Вс янв 20, 2013 13:38:49 
Друг Кота

Карма: 33
Рейтинг сообщений: 213
Зарегистрирован: Ср окт 14, 2009 10:37:49
Сообщений: 3956
Откуда: Украина
Рейтинг сообщения: 0
mvn77 писал(а):
точно блин - косяк. Получается что максимальный интервал это 256 секунд?

Это зависит от компилятора, скорее всего он просто "отбросит" старшие байты.
Что касается спящего режима, то почитайте здесь.
Если Вы хотите (если еще хотите), чтобы МК просыпался по переполнению TCNT0, то спящий режим должен быть Idle и не надо запрещать прерывания.


Вернуться наверх
 
 Заголовок сообщения: Re: пробуждение atmega8 при переполнении TCNT0
СообщениеДобавлено: Вс янв 20, 2013 15:17:22 
Родился

Зарегистрирован: Пн янв 07, 2013 16:56:30
Сообщений: 14
Рейтинг сообщения: 0
Цитата:
Что касается спящего режима, то почитайте здесь.
Если Вы хотите (если еще хотите), чтобы МК просыпался по переполнению TCNT0, то спящий режим должен быть Idle и не надо запрещать прерывания.

Спасибо за ссылку на статью и внимание которое вы уделяете, возникает вопрос, почему при засыпании в MCUCR=0xA0; //power down mode, у меня он из этого режима выходит при переполнении TCNT0, но выходит как из сброса , код исполняется с начала а не с места остановки. По идее его из этого режима может тока ватч дог вывести или внешнее прерывание.
Кстати интересно перевести мою задачу на TCNT1 он 16 битный, хотя он не подходит из за отсутствия возможности тактировать из вне.


Вернуться наверх
 
 Заголовок сообщения: Re: пробуждение atmega8 при переполнении TCNT0
СообщениеДобавлено: Вс янв 20, 2013 16:39:06 
Друг Кота

Карма: 33
Рейтинг сообщений: 213
Зарегистрирован: Ср окт 14, 2009 10:37:49
Сообщений: 3956
Откуда: Украина
Рейтинг сообщения: 0
mvn77 писал(а):
возникает вопрос, почему при засыпании в MCUCR=0xA0; //power down mode, у меня он из этого режима выходит при переполнении TCNT0

Не знаю, что у Вас там в программе. У меня такого не происходит. Запустите отладку, пройдите в пошаговом режиме...
mvn77 писал(а):
Кстати интересно перевести мою задачу на TCNT1 он 16 битный, хотя он не подходит из за отсутствия возможности тактировать из вне.

Если это для решения первоначальной задачи, то смысла нет, до 10 (TCNT0 = 249) может досчитать и 8 битный счетчик.
А если в принципе, то читайте даташит:
Datasheet писал(а):
The Timer/Counter can be clocked by an internal or an external clock source. The clock
source is selected by the clock select logic which is controlled by the clock select
(CS12:10) bits located in the Timer/Counter Control Register B(TCCR1B).
.................
1 1 0 External clock source on T1 pin. Clock on falling edge.
1 1 1 External clock source on T1 pin. Clock on rising edge.


Вернуться наверх
 
 Заголовок сообщения: Re: пробуждение atmega8 при переполнении TCNT0
СообщениеДобавлено: Вс янв 20, 2013 16:46:35 
Поставщик валерьянки для Кота

Карма: 16
Рейтинг сообщений: 329
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Сообщений: 2222
Откуда: Tashkent
Рейтинг сообщения: 0
Еще один человек желает набить шишек на протеусе...

Возьмите Мегу16(у ней есть JTAG), соберите за вечер miniICE и отлаживайтесь через AVRStudio в реальном железе!
Когда все будет пучком, перенесете код под М8, благо разница минимальна.


Вернуться наверх
 
 Заголовок сообщения: Re: пробуждение atmega8 при переполнении TCNT0
СообщениеДобавлено: Вс янв 20, 2013 17:10:10 
Родился

Зарегистрирован: Пн янв 07, 2013 16:56:30
Сообщений: 14
Рейтинг сообщения: 0
Цитата:
1 1 0 External clock source on T1 pin. Clock on falling edge.
1 1 1 External clock source on T1 pin. Clock on rising edge.


Блин что то правда проглядел, все перенастроил - работает. Но все таки вопрос остается, почему переполнение работает в режиме power down mode, и почему код начинается исполнятся не с момента окончания а с нуля, получается не просыпание а запуск. В принципе и такой вариант меня очень даже устраивает. Но нужно ли регистры переключать перед сном на вход что бы утечки не было?
2 uk8amk - спасибо за подсказку, учту но 16той под руками нет, а брать тока за 160 км.
код щас выглядит так:
// ----сон---------

TIMSK |= (1<<TOIE1); // разрешить прерывание по переполнению таймера счетчика
TCCR1B = (1<<CS12)|(1<<CS11)|(1<<CS10); // устанавливаем отсчет по синхроимпульсу на T1
TCNT1 = 65525; // до переполнения 10 тактов в нашем случае 10 секунд
GICR|=0x40; //включить INT0
//MCUCR=0x80; // idle mode
MCUCR=0xA0; //power down mode только в этом режиме можно проснутся по переполнению
//MCUCR=0xB0; // power save mode
//MCUCR=0xE0;; // standby mode
GIFR=0x40;

#asm("sei") //Глобальное разрешение прерываний.
#asm("sleep") //Отправляем контроллер в спящий режим
#asm("cli") //Глобальное запрещение прерываний.


Вернуться наверх
 
 Заголовок сообщения: Re: пробуждение atmega8 при переполнении TCNT0
СообщениеДобавлено: Вс янв 20, 2013 17:46:43 
Друг Кота

Карма: 33
Рейтинг сообщений: 213
Зарегистрирован: Ср окт 14, 2009 10:37:49
Сообщений: 3956
Откуда: Украина
Рейтинг сообщения: 0
mvn77 писал(а):
Но все таки вопрос остается, почему переполнение работает в режиме power down mode

Не знаю, давайте полностью исходник. Если проверяете уже в железе - ищите ошибки, проверьте конфигурацию портов. У меня все работает штатно.
MCUCR=0xA0; //вот так из сна по переполнению счетчика не выходит.
MCUCR=0x80; //а вот так выходит, ничего не сбрасывается.
#asm("cli") //а так прерывания вообще никогда не наступают, вечный сон


Вернуться наверх
 
 Заголовок сообщения: Re: пробуждение atmega8 при переполнении TCNT0
СообщениеДобавлено: Вс янв 20, 2013 17:56:52 
Родился

Зарегистрирован: Пн янв 07, 2013 16:56:30
Сообщений: 14
Рейтинг сообщения: 0
подозрение что действительно глюк протеуса - буду на реальном железе пробовать. Подскажите на счет отключения утечек при MCUCR=0x80; так подозреваю придется с ними повозится.


Вернуться наверх
 
 Заголовок сообщения: Re: пробуждение atmega8 при переполнении TCNT0
СообщениеДобавлено: Вс янв 20, 2013 18:08:34 
Друг Кота

Карма: 33
Рейтинг сообщений: 213
Зарегистрирован: Ср окт 14, 2009 10:37:49
Сообщений: 3956
Откуда: Украина
Рейтинг сообщения: 0
mvn77 писал(а):
Но нужно ли регистры переключать перед сном на вход что бы утечки не было?
...
Подскажите на счет отключения утечек при MCUCR=0x80;

Я уже пару раз предлагал Вам почитать даташит... Не судьба? Там есть раздел:
Power Management and Sleep Modes, а в нем подраздел: Minimizing Power Consumption, где все подробно расписано. Поищите в сети русский вариант описания...
mvn77 писал(а):
...подозрение что действительно глюк протеуса - буду на реальном железе пробовать...

Так проще всего списать свои ошибки. А в железе на что будете списывать? на МК?
Я то как раз проверял в Proteus и все работает...


Вернуться наверх
 
 Заголовок сообщения: Re: пробуждение atmega8 при переполнении TCNT0
СообщениеДобавлено: Вс янв 20, 2013 22:07:54 
Родился

Зарегистрирован: Пн янв 07, 2013 16:56:30
Сообщений: 14
Рейтинг сообщения: 0
В общем по снижению энергопотребления дела плохи, нашел только
SFIOR = (1<<PUD); //включаем на всех шинах Z
ACSR |= (1<<ACD); //выключем компаратор
ADCSRA = (0<<ADEN);// выключаем АЦП
WDTCR = 0x00; //Выключить WDT
так и не смог разобраться с выключением
Супервизор питания
Встроенный источник опорного напряжения
Линии портов ввода-вывода - которые я в принципе отцепил от подтягивающих резисторов но не смог пока найти как правильно все перевести на вход.

По поводу даташита, я понимаю вещь хорошая, но не всегда он адекватно может помочь, все таки он рассчитан на инженеров.
Часто приходится видеть как человека с той или иной проблемой отправляют к первоисточникам, что ни дает ему никаких шансов на решение той или иной проблемы. Было бы интересно если бы в школах давали детям учебники и говорили - там все есть.
Русского варианта даташита на атмегу8 нет, а в английской версии не расписано как выключать, есть просто ссылки на странице где рассматривается то или иное устройство. Вообще переход в спящий режим окутан тайной, есть много вопросов но нигде нет ответов, видно просто мало кто эти микросхемы питает от батарей. Так что постараюсь во всем разобраться, что бы другие уже так не мучились как я.


Вернуться наверх
 
 Заголовок сообщения: Re: пробуждение atmega8 при переполнении TCNT0
СообщениеДобавлено: Пн янв 21, 2013 07:32:23 
Друг Кота

Карма: 33
Рейтинг сообщений: 213
Зарегистрирован: Ср окт 14, 2009 10:37:49
Сообщений: 3956
Откуда: Украина
Рейтинг сообщения: 0
mvn77 писал(а):
Было бы интересно если бы в школах давали детям учебники и говорили - там все есть.

Во-первых, мы не в школе, может Вы себя и считаете учеником, но я себя преподавателем не считаю. Даже просто потому, что лучше чем в даташит объяснить не смогу.
Во-вторых, следуя этой логике, учебники вообще надо отменить, а домашние задания должны делать сами учителя.
В-третьих, если Вы решили изучить предмет, все равно придется читать учебник. Если Вы хотите, чтобы за Вас решили задачу, или списать готовое решение - так сразу и скажите. Вы же даже тетрадку с Вашим решением не показываете...
mvn77 писал(а):
Русского варианта даташита на атмегу8 нет, а в английской версии не расписано как выключать, есть просто ссылки на странице где рассматривается то или иное устройство.

Русского нету, по крайней мере, я не встречал. А в даташит расписано все. Но я же предлагал "Поищите в сети русский вариант описания..." Или тоже все надо на блюдечке... Пример:
mvn77 писал(а):
Линии портов ввода-вывода - которые я в принципе отцепил от подтягивающих резисторов но не смог пока найти как правильно все перевести на вход.

На раздел даташит давать ссылку, я так понимаю бессмысленно, но вот первая ссылка, найденная google по запросу "конфигурация портов ATMEGA8".
Если есть конкретные вопросы - задавайте, но прежде даташит читать обязательно! если хотите во всем разобраться. Да и не грех в поисковик задать вопрос, на все вопросы уже есть ответы...


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 17 ] 

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y