Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Объединить Rst и порт
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
SerjT
Здравствуйте.
Разрабатываю устройство с батарейным питанием.
Контроллер находится в LPM4.
На входе rst кнопка, вход rst запараллелен на p1.0.
Программа при запуске настраивает вход rst на функцию NMI, а
Порт на вход. На порт вешается обработчик прерывания ну и дальнейшая работа как с обычной кнопкой. Можно ловить короткие, длинные нажатия, удержания, отпускания и т.п.
При выходе из программы, вход rst перенастраивается на функцию сброса и делается переход в LPM4.
Вопрос : нет ли скрытых проблем в этой схеме? Возможно они могу вылезти при программировании: например порт настроиться на выход и будет держать 0 - все время сброшен.
Кто-нибудь реализовал подобные схемы? Может предложите ещё варианты.
Baser
Цитата(SerjT @ Apr 26 2017, 08:46) *
Вопрос : нет ли скрытых проблем в этой схеме?

Проблема в возможности "на ходу" менять функцию RST или NMI.
А если есть возможность сбоя, то он обязательно иногда будет случаться. И вашей кнопкой нельзя будет разбудить устройство.
А разбудить можно будет только Power On Reset.

Так что при такой идеологии или должна быть скрытая сервисная кнопка сброса, которая отключает питание МК,
или возможность вытащить батарею.

В сложном случае, типа неразборный герметичный Ex корпус с несменяемыми аккумуляторами - только схемный аппаратный триггер вкл/выкл питания прибора.
Obam
Цитата(SerjT @ Apr 26 2017, 09:46) *
…На входе rst кнопка, вход rst запараллелен на p1.0.
Программа при запуске настраивает вход rst на функцию NMI, а
Порт на вход. На порт вешается обработчик прерывания ну и дальнейшая работа как с обычной кнопкой. Можно ловить короткие, длинные нажатия, удержания, отпускания и т.п.

Вопрос : нет ли скрытых проблем в этой схеме? Возможно они могу вылезти при программировании: например порт настроиться на выход и будет держать 0 - все время сброшен.

Проц вы утаили, буду говорить о F449: альтернативная функция P1.0 - это выход Bootstrap Loader (BSL). Будете использовать BSL - не нажимайте вашу кнопку.

LPM4 не применял, оставлял ACLK, а это LPM3. Ну и цитата:
2.3.1 Entering and Exiting Low-Power Modes
An enabled interrupt event wakes the MSP430 from any of the low-power operating modes.

А ещё дребезг "весело" давить с кнопкой на ~RST/NMI (эт так из собственного опыта).
SerjT
Цитата(Baser @ Apr 26 2017, 12:59) *
Проблема в возможности "на ходу" менять функцию RST или NMI.
А если есть возможность сбоя, то он обязательно иногда будет случаться. И вашей кнопкой нельзя будет разбудить устройство.
А разбудить можно будет только Power On Reset.


Вот тут, как раз, проблем нет.
В начале программы вход RST делается входом NMI, а перед переходом в LPM4 снова меняется на RST. Устройство прекрасно будится.
Если в результате помех произойдет сбой, то мне это не важно.

Проц AFE253, программирование по Spy-by-wire. BSL в этом чипе нет.

Цитата(Obam @ Apr 26 2017, 14:23) *
LPM4 не применял, оставлял ACLK, а это LPM3. Ну и цитата:
2.3.1 Entering and Exiting Low-Power Modes
An enabled interrupt event wakes the MSP430 from any of the low-power operating modes.


Про это я знаю, тут сказано, что прерывания от порта (например) разбудит из LPM4.

Но аппаратный ресет, мне кажется как то понадежнее. Да и корпус не слишком легко разборный, что-бы батарейку передернуть.



>> А ещё дребезг "весело" давить с кнопкой на ~RST/NMI (эт так из собственного опыта).

Вот по поводу дребезга и вопрос:

Хочу параллельно RST присоединить какой-нибудь порт (не обезательно P1.0), при старте программы глушить RST,
а кнопку обрабатывать уже обычным способом. При этом получится реализовать обнаружение длинных-коротких нажатий и пр.
Вход NMI обнаруживает только переходы, а уровни нет.

Вот, собственно, что вы скажете про такую схему?
Obam
Так ведь и GPIO реагирует только на фронт (или прерывания от порта не нужны?).
Дребезг - это как раз несколько переключений (в итоге фронтов) в течение мс 30-ти, не меньше… и каждый свой фронт NMI отработает (приоритет самый старший и быстродействия хватит) - вот в этом и "головняк".
Быстродействие человека существенно ниже что-то ~ 5 нажатий в секунду.

ПовозИтесь, конечно, с NMI, пощупайте, опыт он лишним не будет, но (по моему скромному опыту) результативнее опрос кнопок по таймеру.
SLAA139 документик техасовский на всякий случай гляньте.
SerjT
Цитата(Obam @ Apr 26 2017, 16:42) *
Так ведь и GPIO реагирует только на фронт (или прерывания от порта не нужны?).
Дребезг - это как раз несколько переключений (в итоге фронтов) в течение мс 30-ти, не меньше… и каждый свой фронт NMI отработает (приоритет самый старший и быстродействия хватит) - вот в этом и "головняк".
Быстродействие человека существенно ниже что-то ~ 5 нажатий в секунду.

ПовозИтесь, конечно, с NMI, пощупайте, опыт он лишним не будет, но (по моему скромному опыту) результативнее опрос кнопок по таймеру.
SLAA139 документик техасовский на всякий случай гляньте.


На порту можно еще и уровень проверить, а на входе NMI нет.
Антидребезг на порту: ловим переход, по таймеру выжидаем время, проверяем уровень если тот-что нужен - фиксируем нажатие,

а как реализовать подобное на NMI (попроще) я не знаю.

Документик сейчас посмотрю.
Obam
Цитата(SerjT @ Apr 26 2017, 17:46) *
На порту можно еще и уровень проверить, а на входе NMI нет.

Ну почему же? "0" будет: фронт-то отрицательный.

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

Так я примерно и полагал (: Вам кажется что человек ну очень быстрый источник (:
Ладно, делайте как задумали, а ежели что "ловить переход" и NMI - лишнее.
Baser
Цитата(SerjT @ Apr 26 2017, 16:18) *
Вот тут, как раз, проблем нет.
В начале программы вход RST делается входом NMI, а перед переходом в LPM4 снова меняется на RST. Устройство прекрасно будится.
Если в результате помех произойдет сбой, то мне это не важно.

Если при сбое ваше устройство уйдет в LPM с конфигурацией вход NMI и прерывания NMI и прочие запрещены - оно не проснется.
На столе случайно получить такую ситуацию невероятно.
Но у заказчиков такие ситуевины случались - это не измышления, а реальный опыт.
Для бытовой поделки можно раз в пару лет и иголочкой на скрытую кнопочку нажать, а с серьезным прибором выглядит некрасиво.
SerjT
Цитата(Baser @ Apr 26 2017, 17:05) *
Для бытовой поделки можно раз в пару лет и иголочкой на скрытую кнопочку нажать, а с серьезным прибором выглядит некрасиво.

Да вот я про это и говорю, если устройство, вдруг заглючит и перестанет реагировать на кнопку на порту - потребуется кнопка ресет,
а она как раз доступна пользователю так как это одна и та же кнопка .

Если вы говорите, что все это лишнее, и контроллер достаточно стабилен. То вариант из SLAA139 вполне подходящий.
Просто до этого с F149 были проблемы с запуском. Там не то что ресет, передергивание питания не всегда помогало.
k155la3
Цитата(SerjT @ Apr 26 2017, 16:46) *
На порту можно еще и уровень проверить, а на входе NMI нет.
Антидребезг на порту: ловим переход, по таймеру выжидаем время, проверяем уровень если тот-что нужен - фиксируем нажатие,
. . .

При отработке прерывания по кнопке (допустим Fail)
в векторе запрещается это прерывание и идет longjump() на точку, где реализован цикл с LPM3 - там активизируется таймер ACLK/250ms
опроса состяния порта раз в 250 мс в течение около 4с. С анализом что-когда-сколько времени нажималось + антидребезг.
В моем случае это не кнопка, а состояние системы питания (авария), поэтому стек можно было обнулить и пойти на ресет по longjump.
Нет смысла дрегать вектор прерывания кнопкой с дребезгом и бороться с нимже.
SerjT
Цитата(k155la3 @ Apr 26 2017, 17:15) *
При отработке прерывания по кнопке (допустим Fail)
в векторе запрещается это прерывание и идет longjump() на точку, где реализован цикл с LPM3 - там активизируется таймер ACLK/250ms
опроса состяния порта раз в 250 мс в течение около 4с. С анализом что-когда-сколько времени нажималось + антидребезг.
В моем случае это не кнопка, а состояние системы питания (авария), поэтому стек можно было обнулить и пойти на ресет по longjump.
Нет смысла дрегать вектор прерывания кнопкой с дребезгом и бороться с нимже.


Я вроде примерно также и описал:

1. Ловим первый переход (фрон, срез - что требуется нажатие, отпучкание),
2. Отключаем прерывания от кнопки
3. ждем время дребезга .
4. проверяем состояние порта (для защиты от случайных помех)
5. если состояние нужное - фиксируем нажатие.
6. по таймеру, с фиксированным (или нет) интервалом проверяем состояние порта
7. если по истечению N-проверок порт не менял состояние фиксирум нажатие длинны N.
Baser
Цитата(SerjT @ Apr 26 2017, 17:11) *
Да вот я про это и говорю, если устройство, вдруг заглючит и перестанет реагировать на кнопку на порту - потребуется кнопка ресет,
а она как раз доступна пользователю так как это одна и та же кнопка .

Не, я как раз говорю, что вход RST/NMI у MSP430 кривой до ужаса и не является "честным" ресетом. Имеет полное право при определенных ситуациях не работать даже согласно документации.

Цитата
Просто до этого с F149 были проблемы с запуском. Там не то что ресет, передергивание питания не всегда помогало.

Кардинально ничего они в серии MSP430F2x/4x не поменяли. Добавили BOR, подкрутили немного систему сброса и улучшили вочдог, так и не доведя его до действительно "честного". Так что иногда помогает только передергивание питания.

Но это просто мой ответ на ваш вопрос:
Цитата
нет ли скрытых проблем в этой схеме?

решать вам cool.gif
k155la3
Цитата(SerjT @ Apr 26 2017, 17:23) *
Я вроде примерно также и описал:
. . .

Моя софтина по такой схеме тестируется уже около месяца - "завесы" в непонятном состоянии не замечены.
Ресетный пин не трогался - ф-ия ресет. Проц - F5438A.

ps - после отработки прерывания пин сигнала просто опрашивается.


jcxz
Цитата(Baser @ Apr 26 2017, 17:09) *
и улучшили вочдог, так и не доведя его до действительно "честного".

Честных встроенных WDT не бывает. Потому что они все программно отключаемые/включаемые, а значит уже поэтому - не честные.
dxp
QUOTE (jcxz @ Apr 29 2017, 04:25) *
Честных встроенных WDT не бывает. Потому что они все программно отключаемые/включаемые, а значит уже поэтому - не честные.

Intel 8xC51GB, встроенный watchdog timer неотключаемый.
Obam
Цитата(dxp @ Apr 29 2017, 15:18) *
Intel 8xC51GB, встроенный watchdog timer неотключаемый.

Но работает пока работает тактовый генератор, нужно добавить (;
dxp
QUOTE (Obam @ Apr 29 2017, 21:14) *
Но работает пока работает тактовый генератор, нужно добавить (;

Да, и ещё когда питание подано.
Baser
Цитата(jcxz @ Apr 29 2017, 00:25) *
Честных встроенных WDT не бывает. Потому что они все программно отключаемые/включаемые, а значит уже поэтому - не честные.

Бывают очень сильно приближенные к внешним аппаратным.
А у MSP430, я бы сказал, что WDT самый фиктивный, для "галочки", из тех что я видел.

Под практически "честным" вочдогом я понимаю таймер, который работает от независимого RC-генератора и есть возможность при помощи Flash/EEPROM конфигурационных битов включить возможность запрета его программного отключения.
Такие вочдоги были почти на всех старых PICах и AVRах. В новых PICах наворочены программные конфигурационные возможности, которые снижают надежность вочдога, но все же это Flash биты конфигурации, а не SRAM, как у MSP430.

У тех STM32, что я применял, сделано неплохо, хотя мне не нравится этот принцип, когда OPTION-конфигурация читается один раз из флеша в ОЗУ после рестарта и потом вся работа ведется с копией в ОЗУ. Могли бы таким образом надежность не снижать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.