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

 
 
> Покритикуйте алгоритм включения и выключения устройства на AVR
zheka
сообщение Mar 29 2011, 09:21
Сообщение #1


Гуру
******

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



Господа, есть некое устройство на АТМега, управляющее TFT-дисплеем с тачпанелью и небольшим набором периферии. Подключено к автомобильному аккумулятору постоянно. А значит нужно предусмотреть включение и выкючение устройства. При всем изяществе конструкции, наличии тачпанели слишком жалко будет смотреться механический переключатель для коммутации. Хочется выключать устройство нажав виртуальную кнопку на тачпанели, а включать простым прикосновением к экрану. А посему возникла такая идея:
Контроллер управляет дисплеем через специальную плату (если кому интересно TFT-компаньон) Эта плата умеет выходить в режим пониженного потребления и понимает в нем только две команды - выход из режима пониженного энергопотребления и опрос тачпанели.
Я планирую по нажатии на виртуальную кнопку на экране переводить его в PowerDown. Затем переводть в PowerDown (именно в этот режим) и сам AVR. Как включать? Предварительно - настроить WatchDog на 1 сек и на генерацию прерывания по переполнению. В прерывании опрашивать тачпанель и если было прикосновение - можно просыпаться. Однако получается следующее - при выключении всего устройства мы его на самом деле не выключаем, а переводим в спящий режим, и при включении оказываемся на том же месте. Хотелось бы перезагрузить и контроллер. А для этого хочу попробовать следующее - если при обработке прерывания от сорожевого таймера выяснится что к тачпанели прикасались - перенастраивать таймер на сброс контроллера и более короткий период (самый короткий 16 мс). После чего ждать следующего переполнения таймера.

Пока не пробовал, идею сочинял на работе, попробую только дома.

Вопросы:
1. Довольно странный алгоритм получился - при выключении устройство на самом деле просто останавливается, а истинная его перезагрузка происходит только при включении. Хотя на самом деле ввсе выглядит благористойно (забыл сказать - в режиме PowerDown TFT компаньон не только меньше жрет, но и подсветку отключает). Может есть какие-то более адекватные истрически сложившиеся алгоритмы?
2. Есть ли какой-то иной способ программного сброса AVR? Цеплять какой-нибудь выход на RESET не предлагайте, плата сделана и детали напаяны.
3. Не происходит ли чего нехорошего с портами ввода вывода в режиме PowerDown АВР? Нужно чтобы пины оставались в том же состоянии.
Спасибо.

Сообщение отредактировал zheka - Mar 29 2011, 09:22
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zheka
сообщение Mar 31 2011, 18:04
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 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

Сообщений в этой теме
- zheka   Покритикуйте алгоритм включения и выключения устройства на AVR   Mar 29 2011, 09:21
- - forever_student   Цитата(zheka @ Mar 29 2011, 13:21) ... 2....   Mar 29 2011, 09:53
- - zheka   Извните, ассемблера не знаю. Пишу на С. Но даже гл...   Mar 29 2011, 10:38
|- - forever_student   Цитата(zheka @ Mar 29 2011, 14:38) Извнит...   Mar 29 2011, 10:45
|- - ILYAUL   Цитата(zheka @ Mar 29 2011, 14:38) Но даж...   Mar 29 2011, 18:27
|- - aaarrr   Цитата(ILYAUL @ Mar 29 2011, 22:27) Интер...   Mar 29 2011, 20:05
|- - ILYAUL   Цитата(aaarrr @ Mar 30 2011, 00:05) Помим...   Mar 29 2011, 20:34
|- - aaarrr   Цитата(ILYAUL @ Mar 30 2011, 00:34) Как б...   Mar 29 2011, 20:44
|- - ILYAUL   Цитата(aaarrr @ Mar 30 2011, 00:44) Скажи...   Mar 30 2011, 09:57
- - zheka   Спасибо за совет, но я все же предпочту для переза...   Mar 29 2011, 10:49
- - _Pasha   Дык все тривиально, не о чем переживать. Первый по...   Mar 29 2011, 11:28
- - SysRq   Теоретически, можно перезагрузить МК тоже. На стар...   Mar 29 2011, 15:55
- - Marian   Цитата(zheka @ Mar 29 2011, 11:21) Однако...   Mar 29 2011, 17:22
- - coolbassnik   Есть идея заставить МК ресетить самого себя железн...   Mar 29 2011, 17:30
|- - _Pasha   Цитата(coolbassnik @ Mar 29 2011, 20:30) ...   Mar 29 2011, 17:33
|- - IgorKossak   Цитата(coolbassnik @ Mar 29 2011, 20:30) ...   Mar 29 2011, 17:39
- - zombi   Цитата(zheka @ Mar 29 2011, 13:21) Предва...   Mar 29 2011, 20:24
- - Atridies   Я не сильно знаю Атмегу, но на MSP430 я делал сбро...   Mar 29 2011, 20:56
- - aaarrr   Вот и попались. Логика USART'а сброшена не буд...   Mar 30 2011, 10:45
|- - forever_student   Цитата(aaarrr @ Mar 30 2011, 14:45) ...Ло...   Mar 30 2011, 11:04
||- - aaarrr   Цитата(forever_student @ Mar 30 2011, 15...   Mar 30 2011, 12:32
||- - forever_student   Цитата(aaarrr @ Mar 30 2011, 16:32) ...Вы...   Mar 30 2011, 13:22
||- - aaarrr   Цитата(forever_student @ Mar 30 2011, 17...   Mar 30 2011, 13:33
||- - forever_student   Цитата(aaarrr @ Mar 30 2011, 17:33) Возмо...   Mar 30 2011, 13:45
|- - defunct   Цитата(aaarrr @ Mar 30 2011, 12:45) Тоже ...   Mar 30 2011, 13:51
|- - ILYAUL   Цитата(aaarrr @ Mar 30 2011, 14:45) Логик...   Mar 31 2011, 11:38
|- - aaarrr   Цитата(ILYAUL @ Mar 31 2011, 15:38) Не по...   Mar 31 2011, 11:54
|- - ILYAUL   Цитата(aaarrr @ Mar 31 2011, 15:54) Тольк...   Mar 31 2011, 12:11
- - zheka   Господа, необходимость железного сброса продиктова...   Mar 30 2011, 15:04
- - aaarrr   Ну а собственно sleep где?   Mar 30 2011, 16:08
- - zheka   КодНу а собственно sleep где? Да уже исправил. Вс...   Mar 30 2011, 16:48
- - zheka   Так... работаю со сторожевым таймером... Господа о...   Mar 30 2011, 19:05
|- - forever_student   Цитата(zheka @ Mar 30 2011, 23:05) ...Сут...   Mar 30 2011, 20:02
- - zheka   Хм.. я обошелся вообще без флажка для WDT. В смысл...   Mar 31 2011, 12:56
|- - ILYAUL   Цитата(zheka @ Mar 31 2011, 16:56) КРоме ...   Mar 31 2011, 13:02
||- - defunct   Цитата(ILYAUL @ Mar 31 2011, 16:02) Это к...   Mar 31 2011, 16:36
||- - ILYAUL   Цитата(defunct @ Mar 31 2011, 20:36) Наве...   Mar 31 2011, 17:51
|- - zombi   Цитата(zheka @ Mar 31 2011, 16:56) КРоме ...   Mar 31 2011, 22:12
- - ILYAUL   Может 0,5 сек опрос   Mar 31 2011, 19:30
- - zheka   Так ведь он разрешен или я чего-то не понимаю... В...   Apr 1 2011, 06:02
- - zombi   Цитата(zheka @ Apr 1 2011, 10:02) Так вед...   Apr 1 2011, 08:18


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

 


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


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