Перейти к содержанию
    

Объединить Rst и порт

Здравствуйте.

Разрабатываю устройство с батарейным питанием.

Контроллер находится в LPM4.

На входе rst кнопка, вход rst запараллелен на p1.0.

Программа при запуске настраивает вход rst на функцию NMI, а

Порт на вход. На порт вешается обработчик прерывания ну и дальнейшая работа как с обычной кнопкой. Можно ловить короткие, длинные нажатия, удержания, отпускания и т.п.

При выходе из программы, вход rst перенастраивается на функцию сброса и делается переход в LPM4.

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

Кто-нибудь реализовал подобные схемы? Может предложите ещё варианты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос : нет ли скрытых проблем в этой схеме?

Проблема в возможности "на ходу" менять функцию RST или NMI.

А если есть возможность сбоя, то он обязательно иногда будет случаться. И вашей кнопкой нельзя будет разбудить устройство.

А разбудить можно будет только Power On Reset.

 

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

или возможность вытащить батарею.

 

В сложном случае, типа неразборный герметичный Ex корпус с несменяемыми аккумуляторами - только схемный аппаратный триггер вкл/выкл питания прибора.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

…На входе 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 (эт так из собственного опыта).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблема в возможности "на ходу" менять функцию RST или NMI.

А если есть возможность сбоя, то он обязательно иногда будет случаться. И вашей кнопкой нельзя будет разбудить устройство.

А разбудить можно будет только Power On Reset.

 

Вот тут, как раз, проблем нет.

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

Если в результате помех произойдет сбой, то мне это не важно.

 

Проц AFE253, программирование по Spy-by-wire. 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.

 

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

 

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

 

 

 

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

 

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

 

Хочу параллельно RST присоединить какой-нибудь порт (не обезательно P1.0), при старте программы глушить RST,

а кнопку обрабатывать уже обычным способом. При этом получится реализовать обнаружение длинных-коротких нажатий и пр.

Вход NMI обнаруживает только переходы, а уровни нет.

 

Вот, собственно, что вы скажете про такую схему?

Изменено пользователем SerjT

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так ведь и GPIO реагирует только на фронт (или прерывания от порта не нужны?).

Дребезг - это как раз несколько переключений (в итоге фронтов) в течение мс 30-ти, не меньше… и каждый свой фронт NMI отработает (приоритет самый старший и быстродействия хватит) - вот в этом и "головняк".

Быстродействие человека существенно ниже что-то ~ 5 нажатий в секунду.

 

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

SLAA139 документик техасовский на всякий случай гляньте.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так ведь и GPIO реагирует только на фронт (или прерывания от порта не нужны?).

Дребезг - это как раз несколько переключений (в итоге фронтов) в течение мс 30-ти, не меньше… и каждый свой фронт NMI отработает (приоритет самый старший и быстродействия хватит) - вот в этом и "головняк".

Быстродействие человека существенно ниже что-то ~ 5 нажатий в секунду.

 

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

SLAA139 документик техасовский на всякий случай гляньте.

 

На порту можно еще и уровень проверить, а на входе NMI нет.

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

 

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

 

Документик сейчас посмотрю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На порту можно еще и уровень проверить, а на входе NMI нет.

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

 

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

Так я примерно и полагал (: Вам кажется что человек ну очень быстрый источник (:

Ладно, делайте как задумали, а ежели что "ловить переход" и NMI - лишнее.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот тут, как раз, проблем нет.

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

Если в результате помех произойдет сбой, то мне это не важно.

Если при сбое ваше устройство уйдет в LPM с конфигурацией вход NMI и прерывания NMI и прочие запрещены - оно не проснется.

На столе случайно получить такую ситуацию невероятно.

Но у заказчиков такие ситуевины случались - это не измышления, а реальный опыт.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

а она как раз доступна пользователю так как это одна и та же кнопка .

 

Если вы говорите, что все это лишнее, и контроллер достаточно стабилен. То вариант из SLAA139 вполне подходящий.

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

Изменено пользователем SerjT

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На порту можно еще и уровень проверить, а на входе NMI нет.

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

. . .

При отработке прерывания по кнопке (допустим Fail)

в векторе запрещается это прерывание и идет longjump() на точку, где реализован цикл с LPM3 - там активизируется таймер ACLK/250ms

опроса состяния порта раз в 250 мс в течение около 4с. С анализом что-когда-сколько времени нажималось + антидребезг.

В моем случае это не кнопка, а состояние системы питания (авария), поэтому стек можно было обнулить и пойти на ресет по longjump.

Нет смысла дрегать вектор прерывания кнопкой с дребезгом и бороться с нимже.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При отработке прерывания по кнопке (допустим Fail)

в векторе запрещается это прерывание и идет longjump() на точку, где реализован цикл с LPM3 - там активизируется таймер ACLK/250ms

опроса состяния порта раз в 250 мс в течение около 4с. С анализом что-когда-сколько времени нажималось + антидребезг.

В моем случае это не кнопка, а состояние системы питания (авария), поэтому стек можно было обнулить и пойти на ресет по longjump.

Нет смысла дрегать вектор прерывания кнопкой с дребезгом и бороться с нимже.

 

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

 

1. Ловим первый переход (фрон, срез - что требуется нажатие, отпучкание),

2. Отключаем прерывания от кнопки

3. ждем время дребезга .

4. проверяем состояние порта (для защиты от случайных помех)

5. если состояние нужное - фиксируем нажатие.

6. по таймеру, с фиксированным (или нет) интервалом проверяем состояние порта

7. если по истечению N-проверок порт не менял состояние фиксирум нажатие длинны N.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

а она как раз доступна пользователю так как это одна и та же кнопка .

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

 

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

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

 

Но это просто мой ответ на ваш вопрос:

нет ли скрытых проблем в этой схеме?

решать вам B)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

. . .

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

Ресетный пин не трогался - ф-ия ресет. Проц - F5438A.

 

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

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

и улучшили вочдог, так и не доведя его до действительно "честного".

Честных встроенных WDT не бывает. Потому что они все программно отключаемые/включаемые, а значит уже поэтому - не честные.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Честных встроенных WDT не бывает. Потому что они все программно отключаемые/включаемые, а значит уже поэтому - не честные.

Intel 8xC51GB, встроенный watchdog timer неотключаемый.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...