Например TDA7294

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

Текущее время: Пт дек 19, 2025 14:27:02

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


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



Начать новую тему Ответить на тему  [ Сообщений: 28 ]    , 2
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Sleep
СообщениеДобавлено: Вт фев 02, 2016 11:46:50 
Друг Кота

Карма: 64
Рейтинг сообщений: 1020
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4369
Откуда: Ижевск
Рейтинг сообщения: 0
Цитата:
...INT1, or a pin change interrupt can wake up the MCU.
из описания режима POWER-DOWN, который является более общим режимом для POWER-SAVE с той разницей, что работает таймер Т2 и его клоки Т2.
Цитата:
3. For INT1 and INT0, only level interrupt.
Понимаю так, что только низкий уровень на INT0,1 может вызвать прерывание POWER-DOWN, т.е. если будет настройка на спад импульса, то она не приведет к вызову прерывания. А про pin change ничего не говорится.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Sleep
СообщениеДобавлено: Вт фев 02, 2016 13:05:19 
Встал на лапы

Зарегистрирован: Вс дек 20, 2015 21:03:39
Сообщений: 90
Рейтинг сообщения: 0
охохо- ну да - можно так трактоватьб, akl . Спасибо.
Но почему же EEPROM пишет когда не должен - это ведь должно вести к увеличению потребления - потреблению то пофиг - мусор там пишется или данные.
Попробую загнать EEPROM в Idle


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Sleep
СообщениеДобавлено: Вт фев 02, 2016 19:55:10 
Встал на лапы

Зарегистрирован: Вс дек 20, 2015 21:03:39
Сообщений: 90
Рейтинг сообщения: 0
Ну вроде тьфу-тьфу ушли глюки после того как пишу ЕПРОМ в Idle. Не понимаю почему Amelu не заблокировать режим который наверное просто не получился и его убрали только в документации.
3 дня поисков((


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Sleep
СообщениеДобавлено: Вт фев 02, 2016 20:52:39 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1480
Рейтинг сообщения: 0
Что-то я не понимаю проблем. Насколько я понял нужен энергосберегающий режим. Ну и будите МК когда требуется, пишите данные когда требуется и уходите спать. В чем проблема?


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Sleep
СообщениеДобавлено: Вт фев 02, 2016 21:36:36 
Встал на лапы

Зарегистрирован: Вс дек 20, 2015 21:03:39
Сообщений: 90
Рейтинг сообщения: 0
Не нужно так нервничать. Проходим мимо.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Sleep
СообщениеДобавлено: Ср янв 12, 2022 21:59:23 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2135
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18446
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
не думал, что дойду до такого, но что-то туплю уже который день, и не могу раступлиться.

проекте часиков такой код:
Код:
int main(void){
   show_mode_t show_mode = SHOW_SIMPLE;
   mode_t tm, mode = MODE_TIME;
   uint8_t sec = 255;

   mode_clock_init(mode);

   indication(false); // индикация отключается
   refresh = true;

   sei();
   set_sleep_mode(SLEEP_MODE_PWR_SAVE);////

   while(1){
      while(main_power_miss()){
         // пока питания нет
         indication(false); // индикация отключается
         PORTB=0; // чтобы не было утечек
         sec = time.s;
         // уходим в сон
         do {
            sleep_mode();
            // пробуждение по прерываию от таймера
            refresh = time.s != sec;
         } while (!refresh);
         if(!main_power_miss()) // это от безнадеги пробовал :(
            _delay_ms(100);
      }
      // при наличии питания
      indication(true); // индикация включается

      if(time.s != sec){
         refresh = true;
         sec = time.s;
      }

      // выводим режим
      if(modes[mode].show != NULL)
         modes[mode].show(show_mode);

      refresh = false;
      //if(!played()) SND_PORT &= ~SND_PIN;

      // проверки условий разных событий
      if(!played() && alarm.s && (time.h == alarm.h) && (time.m == alarm.m))
         // принудительно включаем режим будильника, если наступило время
         tm = MODE_WAKE;
      else
         // иначе получаем и обрабатываем событие
         tm = modes[mode].exec(get_key_event());

      if(tm != mode){
         // если возможно - делаем инициализацию нового режима
         if(modes[tm].init != NULL)
            modes[tm].init(mode);
         mode = tm;
         refresh = true;
      }
   }
}
функция проверки потери питания:
Код:
bool main_power_miss(void){
   uint16_t tmp;
   if(ADCSRA == 0)
      return !(PINC & PWR_CHK_PIN); // этот пин заведен на питание +5, цепь отделена диодной развязкой от батарейки
   else {
      ATOMIC_BLOCK(ATOMIC_RESTORESTATE){
         tmp = adc;
      }
      return (ocr >= OCRMAX) && (tmp < 200); // см. примечание ниже
   }
}
примечание: проверка пропадания питания делается не по уровню соответствующего пина, а по сигналу обратной связи с АЦП в регуляторе высокого напряжения для ГРИ: если ocr достигло максимума, а adc никак не достигает номинала, значит, питание повышайки отсутствует, т.е. сетевого питания нет. регулятор работает по прерываниям.

функция включения-выключения индикации:
Код:
void indication(bool on){
   if(ind_on == on) return;
   ind_on = on;
   if(ind_on){
      TCCR1A = TIMER_OC_CLEAR(1A) | _BV(WGM10);
      TCCR1B = TIMER_CLK_DIV_1 | _BV(WGM12);
      TIMSK1 = _BV(TOIE1);
      ADCSRA = _BV(ADEN) | _BV(ADIE) | _BV(ADATE) | ADC_DIV_4;
      ADCSRB = 6; // T1 OVF TRIGGER
      ADMUX = ADC_REF_INT_WITH_ECAP;
      SPCR |= _BV(SPE);
      update_leds(true);
   } else {
      TCCR1B = 0;
      TCCR1A = 0;
      SPCR &= ~_BV(SPE);
      PORTB = 0;
      ADCSRA = 0;
      OCR1A = 0;
      ocr = 0;
   }
}


так вот, проблема в том, что все это работает как-то странно... при пропадании сетевого питания МК засыпает, потребление от батарейки снижается до 10 мкА (на самом деле меньше, просто тестер не показывает). при подаче питания МК просыпается, индикация включается и т.д. однако, иной раз при подаче питания МК не просыпается, или просыпается как-то странно, что индикация не включается, все функции недоступны, высокого напряжения нет. если после этого снова снять питание, ток не падает ниже 5-6 мА, т.е. или МК что-то делает, или это жрет остальная периферия. после попадания в этот клинч помогает только ресет.

грешу на код, но в чем подвох - не могу сообразить. проблема усугубляется тем, что монтаж компактный и никуда не подлезть особо... и что делать и как искать - ума не приложу. главное, что вымораживает - случайность событий: иногда после первого снятия питания не включается, иногда дергаю по 10 раз питание, пока возникнет эффект.

будут какие-то дельные советы, коллеги?

Добавлено after 8 minutes 59 seconds:
кстати, иной раз МК засыпает, а ток не падает ниже 0,8 мА... вообще не понимаю ничего :(

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Sleep
СообщениеДобавлено: Чт янв 13, 2022 23:47:51 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 66
Рейтинг сообщений: 536
Зарегистрирован: Чт июл 28, 2016 07:58:37
Сообщений: 1925
Откуда: Kyiv, UA
Рейтинг сообщения: 0
ARV, а может не париться с зависимостью от АЦП?
Проверять только PINC & PWR_CHK_PIN...
Кстати, PWR_CHK_PIN - это маска или номер бита?
А то я как то долго возился, пока не понял, что маска была не 1<<PORTB4, а просто PORTB4

_________________
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Sleep
СообщениеДобавлено: Пт янв 14, 2022 06:59:54 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2135
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18446
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Проблема с анализом бита в том, что на нем всегда высокий уровень, пока МК не спит, точнее, пока не выключена вся периферия МК... Поэтому и приходится через АЦП корячиться...
P.S. с пином всё ОК, ошибки нет

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


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

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


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 25


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

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


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