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

 
 
> Покритикуйте алгоритм включения и выключения устройства на 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
Ответов
aaarrr
сообщение Mar 30 2011, 10:45
Сообщение #2


Гуру
******

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



Вот и попались. Логика USART'а сброшена не будет такой инициализацией. Нужно было сначала сбросить RXEN и TXEN в 0, чтобы получить то же состояние, что и после хардварного сброса. То же самое касается SPI и прочих интерфейсов.
А перед "JMP 0" нужно как минимум запретить прерывания.

А теперь представьте, что у вас в руках не мелкая AVR'ка, а достаточно приличный контроллер с десятком используемых периферийных блоков, контроллером прерываний и т.п. Тоже будете вручную выбираться из неопределенного состояния после перехода на 0? То что прощается сейчас по причине примитивности контроллера в будущем вылезет изрядными граблями. Лучше изначально использовать правильный подход.
Go to the top of the page
 
+Quote Post
forever_student
сообщение Mar 30 2011, 11:04
Сообщение #3


Местный
***

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



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

А что мешает в INIT сначала принудительно присвоить регистрам используемой периферии
значения после POWER-UP, а потом инициализировать обычным путем?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 30 2011, 12:32
Сообщение #4


Гуру
******

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



Цитата(forever_student @ Mar 30 2011, 15:04) *
А что мешает в INIT сначала принудительно присвоить регистрам используемой периферии
значения после POWER-UP, а потом инициализировать обычным путем?

Ничто не мешает, только это далеко не всегда эквивалентно сбросу.
Вы вот всегда так поступаете? И уверены, что сможете просчитать все возможные побочные эффекты?

Определенное состояние всегда следует предпочитать неопределенному, только и всего.
Go to the top of the page
 
+Quote Post
forever_student
сообщение Mar 30 2011, 13:22
Сообщение #5


Местный
***

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



Цитата(aaarrr @ Mar 30 2011, 16:32) *
...Вы вот всегда так поступаете? И уверены, что сможете просчитать все возможные побочные эффекты?

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

Нет, я не всегда так поступаю.
Но в некоторых МК WDT с непрограммируемым таймаутом.
Ждать ...надцать секунд не всегда хорошо, и если МК не висит - такой сброс помогает.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 30 2011, 13:33
Сообщение #6


Гуру
******

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



Цитата(forever_student @ Mar 30 2011, 17:22) *
Но в некоторых МК WDT с непрограммируемым таймаутом.
Ждать ...надцать секунд не всегда хорошо, и если МК не висит - такой сброс помогает.

Возможно. Но называть это действие сбросом все-таки нельзя.
Go to the top of the page
 
+Quote Post
forever_student
сообщение Mar 30 2011, 13:45
Сообщение #7


Местный
***

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



Цитата(aaarrr @ Mar 30 2011, 17:33) *
Возможно. Но называть это действие сбросом все-таки нельзя.


ОК. Рестарт sm.gif
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
|- - 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
- - zheka   defunct, именно так. Дело в том, что питание будет...   Mar 31 2011, 18:04
- - 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 Текстовая версия Сейчас: 19th July 2025 - 23:06
Рейтинг@Mail.ru


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