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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Покритикуйте алгоритм включения и выключения устройства на AVR
ILYAUL
сообщение Mar 31 2011, 11:38
Сообщение #31


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

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(aaarrr @ Mar 30 2011, 14:45) *
Логика USART'а сброшена не будет такой инициализацией. Нужно было сначала сбросить RXEN и TXEN в 0, чтобы получить то же состояние, что и после хардварного сброса.

Не понимаю , а зачем мне логика USART , которая у меня по-сути была , если наступили условия при которых я делаю программный сброс . Ну был включён у меня передатчик и что с того - условия наступили перезапускается вся система.
Вы представьте задачку с МЕНЮ , в котором Вы можете вкл. и выкл. устройства и Вы отключили USART совсем, для новых условий задачи он Вам не нужен т.е при программном сбросе - Вы пропишите в него 000 чтобы не мешал. Я не вижу смыла записать сначала 000 USART, а затем ещё раз записать в него же необходимые числа , если преполагается использование USART


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 31 2011, 11:54
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(ILYAUL @ Mar 31 2011, 15:38) *
Не понимаю , а зачем мне логика USART , которая у меня по-сути была , если наступили условия при которых я делаю программный сброс . Ну был включён у меня передатчик и что с того - условия наступили перезапускается вся система.

Только вот после "сброса" приемный регистр может содержать старые данные, и после разрешения приема вы тут же их получите. А оно надо?
С каким-нибудь SPI может быть то же самое - SPIF в "1", первый обмен будет испорчен.

Цитата(ILYAUL @ Mar 31 2011, 15:38) *
Вы представьте задачку с МЕНЮ , в котором Вы можете вкл. и выкл. устройства и Вы отключили USART совсем, для новых условий задачи он Вам не нужен т.е при программном сбросе - Вы пропишите в него 000 чтобы не мешал.

Это о чем? Давайте не будем придумывать меню и другие избыточные сущности в контексте обсуждения проблемы программного сброса.

Цитата(ILYAUL @ Mar 31 2011, 15:38) *
Я не вижу смыла записать сначала 000 USART, а затем ещё раз записать в него же необходимые числа , если преполагается использование USART

А он есть.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Mar 31 2011, 12:11
Сообщение #33


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

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(aaarrr @ Mar 31 2011, 15:54) *
Только вот после "сброса" приемный регистр может содержать старые данные, и после разрешения приема вы тут же их получите. А оно надо?
С каким-нибудь SPI может быть то же самое - SPIF в "1", первый обмен будет испорчен.

Да , спасибо. Запомню


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
zheka
сообщение Mar 31 2011, 12:56
Сообщение #34


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Хм.. я обошелся вообще без флажка для WDT. В смысле, флажки есть, но они не относятся к WDT, а в обработчике прерывания WDT вообще пусто. Т.Е. прерывание генрируется, выполняется единственно важная функция - выход из спящего режима. А вот уже по выходу в основной цикл проверяется условие.

КРоме того, я таки сделал более человчно: при старте у меня контроллер усыпляет дисплей и засыпает сам, просыпаясь чтобы проверить тачпанель. А вот при выключеии запускается сторожевой таймер, который при переполнении ресетит контроллер. Пока вроде все работает.

Сообщение отредактировал zheka - Mar 31 2011, 12:57
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Mar 31 2011, 13:02
Сообщение #35


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

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(zheka @ Mar 31 2011, 16:56) *
КРоме того, я таки сделал более человчно: при старте у меня контроллер усыпляет дисплей и засыпает сам, просыпаясь чтобы проверить тачпанель. А вот при выключеии запускается сторожевой таймер, который при переполнении ресетит контроллер. Пока вроде все работает.

Это как , при старте засыпает?


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 31 2011, 16:36
Сообщение #36


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(ILYAUL @ Mar 31 2011, 16:02) *
Это как , при старте засыпает?

Наверно чтобы подключить девайс к питанию - и он сразу в sleep, зато если провести пальцем по таблу - он тут же проявит признаки жизни.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Mar 31 2011, 17:51
Сообщение #37


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

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(defunct @ Mar 31 2011, 20:36) *
Наверно чтобы подключить девайс к питанию - и он сразу в sleep, зато если провести пальцем по таблу - он тут же проявит признаки жизни.

И что получается опрос 1 раз в сек, а если я секунду палец не держал , то и касания не было т.к. дисплей тоже спит


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
zheka
сообщение Mar 31 2011, 18:04
Сообщение #38


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



defunct, именно так.
Дело в том, что питание будет подаваться при подсоедниении к клеммам аккумулятора - а это всерьез и надолго. Выключения и включения физической коммутацией нет, обесточивания при выключении питания не будет. в этом и задумка. Подключили к аккумулятору - нужно еще и на панельку нажать. А далее - нажал кнопку выключения - заработал сторожевой таймер и сбросил контроллер, контроллер стартовал и, ничего не включая сразу в режим сна, просыпаясь раз в секунду, дабы узнать не давит ли кто на тачпанель. Если да - то дальше по тексту программы. Выглядит это все как включение и выключение от тачпанели.

ILYAUL, а что вам не понравилось? У вас мобильник от простого нажатия кнопки включается? Правильно, нет, подержать нужно. По этому принципу работают многие современные устройства. К тому же сенсорная панель - это одна большая кнопка, сам бог велел защитить ее от случайного касания.
Есть другой минус - человеческие рефлексы. Челове должне привыкнуть, что прикасаться нужно в течение секунды, однако возможны варианты, когда влючение произойдет практически сразу после нажатия (в зависимости от текущего состояния таймера) И вот это будет раздражать. Как это поправить - мыслей нет. МОжно конечно настроить на 16 мс, а потом просто ждать секунду, но тогда теряется смысл засыпаний - опрос тачпанели занимает 1 мс, еще какое -то время на танцы вокруг этого опроса, соотношение рабочего и спящего режимов получается невелико...

Выглядит это так:
Код
   StartUP();
   PowerDown();
   delay_ms(3);

//  SetBackLight(0);

    #asm("cli");
    #pragma optsize-
    #asm("wdr")
    WDTCSR |= (1<<WDCE) | (1<<WDE);
    WDTCSR = (1<<WDIE) | (1<<WDP2) | (1<<WDP1);
    #ifdef _OPTIMIZE_SIZE_
    #pragma optsize+
    #endif
    #asm("sei");  
        
     SMCR =(1<<SE)|(1<<SM1);            
     sleep_flag=1;
     #asm("SLEEP")
    
     SPCR_tmp=SPCR;
     SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0); // Настройка SPI
     while(sleep_flag)
     {
      GetTouchStat(touch_x,touch_y);
      if ((x==0)||(y==0)) {sleep_flag=1; #asm("SLEEP");} else sleep_flag=0;
     }    
  
   PowerUp();
   delay_ms(10);
   SPCR=SPCR_tmp;


Повторюсь - в обработчике прерывания то собачьего таймера ничего нет, он просто лает на контроллер и тот просыпается от страха.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Mar 31 2011, 19:30
Сообщение #39


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

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Может 0,5 сек опрос


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
zombi
сообщение Mar 31 2011, 22:12
Сообщение #40


Гуру
******

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



Цитата(zheka @ Mar 31 2011, 16:56) *
КРоме того, я таки сделал более человчно: при старте у меня контроллер усыпляет дисплей и засыпает сам, просыпаясь чтобы проверить тачпанель. А вот при выключеии запускается сторожевой таймер, который при переполнении ресетит контроллер. Пока вроде все работает.

Вроде правильно все, только перед засыпанием после первого включения надобы WDT разрешить biggrin.gif
Go to the top of the page
 
+Quote Post
zheka
сообщение Apr 1 2011, 06:02
Сообщение #41


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Так ведь он разрешен или я чего-то не понимаю...
В любом случае - работает и я доволен.
Go to the top of the page
 
+Quote Post
zombi
сообщение Apr 1 2011, 08:18
Сообщение #42


Гуру
******

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



Цитата(zheka @ Apr 1 2011, 10:02) *
Так ведь он разрешен или я чего-то не понимаю...

Да, если фуз WDTON запрограммирован.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 07:19
Рейтинг@Mail.ru


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