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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Покритикуйте алгоритм включения и выключения устройства на 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
forever_student
сообщение Mar 29 2011, 09:53
Сообщение #2


Местный
***

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



Цитата(zheka @ Mar 29 2011, 13:21) *
...
2. Есть ли какой-то иной способ программного сброса AVR? Цеплять какой-нибудь выход на RESET не предлагайте, плата сделана и детали напаяны.
3. Не происходит ли чего нехорошего с портами ввода вывода в режиме PowerDown АВР? Нужно чтобы пины оставались в том же состоянии.
...

2.
.ORG 0x00
RESET:
.
.
.
.
JMP RESET

3. Пины останутся в том же состоянии
Go to the top of the page
 
+Quote Post
zheka
сообщение Mar 29 2011, 10:38
Сообщение #3


Гуру
******

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



Извните, ассемблера не знаю. Пишу на С.
Но даже глядя на то, что вы написали - это просто уловка для перемещения программы в начало, а не сброс.

Go to the top of the page
 
+Quote Post
forever_student
сообщение Mar 29 2011, 10:45
Сообщение #4


Местный
***

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



Цитата(zheka @ Mar 29 2011, 14:38) *
Извните, ассемблера не знаю. Пишу на С.
Но даже глядя на то, что вы написали - это просто уловка для перемещения программы в начало, а не сброс.


Если Вам нужно перезагрузить МК после выхода из Powerdown - "уловка" поможет.
Если перезагрузить зависший МК - альтернативы WDT не вижу.
Go to the top of the page
 
+Quote Post
zheka
сообщение Mar 29 2011, 10:49
Сообщение #5


Гуру
******

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



Спасибо за совет, но я все же предпочту для перезагрузки WDT. К тому же, внимательно почитав еще раз даташит я убедился, что это единственное самостоятельное внутреннее средство сброса контроллера.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Mar 29 2011, 11:28
Сообщение #6


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Дык все тривиально, не о чем переживать. Первый пост правильный
Go to the top of the page
 
+Quote Post
SysRq
сообщение Mar 29 2011, 15:55
Сообщение #7


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Теоретически, можно перезагрузить МК тоже. На старте уснуть или работать решить по флагам MCUCSR (WDRF, PORF, BORF...).
Go to the top of the page
 
+Quote Post
Marian
сообщение Mar 29 2011, 17:22
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 148
Регистрация: 23-02-07
Пользователь №: 25 618



Цитата(zheka @ Mar 29 2011, 11:21) *
Однако получается следующее - при выключении всего устройства мы его на самом деле не выключаем, а переводим в спящий режим, и при включении оказываемся на том же месте. Хотелось бы перезагрузить и контроллер.

Объясните необходимость сброса проца.
По идее перезагрузка не нужна, если проц. повиснит его сбросит вачдог.
Для надежности поставьте внешний супервизор по питанию.
Если все же видите необходимость повысить надежность, после выхода из сна(при касании тачскрина) запустите принудительную инициализацию важных данных.
Хотя самый простой метод "JMP 0"

Сообщение отредактировал Marian - Mar 29 2011, 17:24
Go to the top of the page
 
+Quote Post
coolbassnik
сообщение Mar 29 2011, 17:30
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 22-10-10
Из: Украина
Пользователь №: 60 348



Есть идея заставить МК ресетить самого себя железно. Для этого любой вывод порта МК подключаем к ресет в Hi-Z состоянии, и когда нужно ресетить, то выводим на этот пин лог. 0. МК по идее должен перезагрузится, и состояние портов - сбросится.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Mar 29 2011, 17:33
Сообщение #10


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(coolbassnik @ Mar 29 2011, 20:30) *
Есть идея заставить МК ресетить самого себя железно. Для этого любой вывод порта МК подключаем к ресет в Hi-Z состоянии, и когда нужно ресетить, то выводим на этот пин лог. 0. МК по идее должен перезагрузится, и состояние портов - сбросится.

А Вы почитайте доки, можно ли так Ымбеддить, а потом пишите. или хоть попробуйте разок.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Mar 29 2011, 17:39
Сообщение #11


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(coolbassnik @ Mar 29 2011, 20:30) *
Есть идея заставить МК ресетить самого себя железно. Для этого любой вывод порта МК подключаем к ресет в Hi-Z состоянии, и когда нужно ресетить, то выводим на этот пин лог. 0. МК по идее должен перезагрузится, и состояние портов - сбросится.

Это только по идее. Длительности сигнала сброса может не хватить для надёжного сброса внутренней периферии.
См. в описании Minimum pulse width on RESET Pin.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Mar 29 2011, 18:27
Сообщение #12


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

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



Цитата(zheka @ Mar 29 2011, 14:38) *
Но даже глядя на то, что вы написали - это просто уловка для перемещения программы в начало, а не сброс.

Интересно , а что Вы понимаете под сбросом? Или Вы считаете что
Цитата
.... но я все же предпочту для перезагрузки WDT
перемещает программу куда то вдругое место ,а не на 0x0000


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

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


Гуру
******

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



Цитата(ILYAUL @ Mar 29 2011, 22:27) *
Интересно , а что Вы понимаете под сбросом? Или Вы считаете что перемещает программу куда то вдругое место ,а не на 0x0000

Помимо программы и ее непосредственного исполнителя у МК как бы существует еще периферия.
Go to the top of the page
 
+Quote Post
zombi
сообщение Mar 29 2011, 20:24
Сообщение #14


Гуру
******

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



Цитата(zheka @ Mar 29 2011, 13:21) *
Предварительно - настроить WatchDog на 1 сек и на генерацию прерывания по переполнению. В прерывании опрашивать тачпанель и если было прикосновение - можно просыпаться. Однако получается следующее - при выключении всего устройства мы его на самом деле не выключаем, а переводим в спящий режим, и при включении оказываемся на том же месте. Хотелось бы перезагрузить и контроллер. А для этого хочу попробовать следующее - если при обработке прерывания от сорожевого таймера выяснится что к тачпанели прикасались - перенастраивать таймер на сброс контроллера и более короткий период (самый короткий 16 мс). После чего ждать следующего переполнения таймера.

По моему это самый верный способ если необходим именно аппаратный сброс.
Но я не понимаю чем вызвана такая необходимость wacko.gif
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Mar 29 2011, 20:34
Сообщение #15


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

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



Цитата(aaarrr @ Mar 30 2011, 00:05) *
Помимо программы и ее непосредственного исполнителя у МК как бы существует еще периферия.

Да и ещё SRAM и регистры тоже бы не помешало "почистить" при запуске, но это всё делается только программным путём. Я говорю про инит процессора и он начинается с 0x0000.
Как будет написана инициализация MK так и будет выполнятся вне зависимости что ее вызвало, если только не учитываются флаги сброса


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

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
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 - 04:01
Рейтинг@Mail.ru


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