SerjT 0 26 апреля, 2017 Опубликовано 26 апреля, 2017 · Жалоба Здравствуйте. Разрабатываю устройство с батарейным питанием. Контроллер находится в LPM4. На входе rst кнопка, вход rst запараллелен на p1.0. Программа при запуске настраивает вход rst на функцию NMI, а Порт на вход. На порт вешается обработчик прерывания ну и дальнейшая работа как с обычной кнопкой. Можно ловить короткие, длинные нажатия, удержания, отпускания и т.п. При выходе из программы, вход rst перенастраивается на функцию сброса и делается переход в LPM4. Вопрос : нет ли скрытых проблем в этой схеме? Возможно они могу вылезти при программировании: например порт настроиться на выход и будет держать 0 - все время сброшен. Кто-нибудь реализовал подобные схемы? Может предложите ещё варианты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 26 апреля, 2017 Опубликовано 26 апреля, 2017 · Жалоба Вопрос : нет ли скрытых проблем в этой схеме? Проблема в возможности "на ходу" менять функцию RST или NMI. А если есть возможность сбоя, то он обязательно иногда будет случаться. И вашей кнопкой нельзя будет разбудить устройство. А разбудить можно будет только Power On Reset. Так что при такой идеологии или должна быть скрытая сервисная кнопка сброса, которая отключает питание МК, или возможность вытащить батарею. В сложном случае, типа неразборный герметичный Ex корпус с несменяемыми аккумуляторами - только схемный аппаратный триггер вкл/выкл питания прибора. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 26 апреля, 2017 Опубликовано 26 апреля, 2017 · Жалоба …На входе 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 0 26 апреля, 2017 Опубликовано 26 апреля, 2017 (изменено) · Жалоба Проблема в возможности "на ходу" менять функцию 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 обнаруживает только переходы, а уровни нет. Вот, собственно, что вы скажете про такую схему? Изменено 26 апреля, 2017 пользователем SerjT Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 26 апреля, 2017 Опубликовано 26 апреля, 2017 · Жалоба Так ведь и GPIO реагирует только на фронт (или прерывания от порта не нужны?). Дребезг - это как раз несколько переключений (в итоге фронтов) в течение мс 30-ти, не меньше… и каждый свой фронт NMI отработает (приоритет самый старший и быстродействия хватит) - вот в этом и "головняк". Быстродействие человека существенно ниже что-то ~ 5 нажатий в секунду. ПовозИтесь, конечно, с NMI, пощупайте, опыт он лишним не будет, но (по моему скромному опыту) результативнее опрос кнопок по таймеру. SLAA139 документик техасовский на всякий случай гляньте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SerjT 0 26 апреля, 2017 Опубликовано 26 апреля, 2017 · Жалоба Так ведь и GPIO реагирует только на фронт (или прерывания от порта не нужны?). Дребезг - это как раз несколько переключений (в итоге фронтов) в течение мс 30-ти, не меньше… и каждый свой фронт NMI отработает (приоритет самый старший и быстродействия хватит) - вот в этом и "головняк". Быстродействие человека существенно ниже что-то ~ 5 нажатий в секунду. ПовозИтесь, конечно, с NMI, пощупайте, опыт он лишним не будет, но (по моему скромному опыту) результативнее опрос кнопок по таймеру. SLAA139 документик техасовский на всякий случай гляньте. На порту можно еще и уровень проверить, а на входе NMI нет. Антидребезг на порту: ловим переход, по таймеру выжидаем время, проверяем уровень если тот-что нужен - фиксируем нажатие, а как реализовать подобное на NMI (попроще) я не знаю. Документик сейчас посмотрю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 26 апреля, 2017 Опубликовано 26 апреля, 2017 · Жалоба На порту можно еще и уровень проверить, а на входе NMI нет. Ну почему же? "0" будет: фронт-то отрицательный. Антидребезг на порту: ловим переход, по таймеру выжидаем время, проверяем уровень если тот-что нужен - фиксируем нажатие, Так я примерно и полагал (: Вам кажется что человек ну очень быстрый источник (: Ладно, делайте как задумали, а ежели что "ловить переход" и NMI - лишнее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 26 апреля, 2017 Опубликовано 26 апреля, 2017 · Жалоба Вот тут, как раз, проблем нет. В начале программы вход RST делается входом NMI, а перед переходом в LPM4 снова меняется на RST. Устройство прекрасно будится. Если в результате помех произойдет сбой, то мне это не важно. Если при сбое ваше устройство уйдет в LPM с конфигурацией вход NMI и прерывания NMI и прочие запрещены - оно не проснется. На столе случайно получить такую ситуацию невероятно. Но у заказчиков такие ситуевины случались - это не измышления, а реальный опыт. Для бытовой поделки можно раз в пару лет и иголочкой на скрытую кнопочку нажать, а с серьезным прибором выглядит некрасиво. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SerjT 0 26 апреля, 2017 Опубликовано 26 апреля, 2017 (изменено) · Жалоба Для бытовой поделки можно раз в пару лет и иголочкой на скрытую кнопочку нажать, а с серьезным прибором выглядит некрасиво. Да вот я про это и говорю, если устройство, вдруг заглючит и перестанет реагировать на кнопку на порту - потребуется кнопка ресет, а она как раз доступна пользователю так как это одна и та же кнопка . Если вы говорите, что все это лишнее, и контроллер достаточно стабилен. То вариант из SLAA139 вполне подходящий. Просто до этого с F149 были проблемы с запуском. Там не то что ресет, передергивание питания не всегда помогало. Изменено 26 апреля, 2017 пользователем SerjT Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 26 апреля, 2017 Опубликовано 26 апреля, 2017 · Жалоба На порту можно еще и уровень проверить, а на входе NMI нет. Антидребезг на порту: ловим переход, по таймеру выжидаем время, проверяем уровень если тот-что нужен - фиксируем нажатие, . . . При отработке прерывания по кнопке (допустим Fail) в векторе запрещается это прерывание и идет longjump() на точку, где реализован цикл с LPM3 - там активизируется таймер ACLK/250ms опроса состяния порта раз в 250 мс в течение около 4с. С анализом что-когда-сколько времени нажималось + антидребезг. В моем случае это не кнопка, а состояние системы питания (авария), поэтому стек можно было обнулить и пойти на ресет по longjump. Нет смысла дрегать вектор прерывания кнопкой с дребезгом и бороться с нимже. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SerjT 0 26 апреля, 2017 Опубликовано 26 апреля, 2017 · Жалоба При отработке прерывания по кнопке (допустим Fail) в векторе запрещается это прерывание и идет longjump() на точку, где реализован цикл с LPM3 - там активизируется таймер ACLK/250ms опроса состяния порта раз в 250 мс в течение около 4с. С анализом что-когда-сколько времени нажималось + антидребезг. В моем случае это не кнопка, а состояние системы питания (авария), поэтому стек можно было обнулить и пойти на ресет по longjump. Нет смысла дрегать вектор прерывания кнопкой с дребезгом и бороться с нимже. Я вроде примерно также и описал: 1. Ловим первый переход (фрон, срез - что требуется нажатие, отпучкание), 2. Отключаем прерывания от кнопки 3. ждем время дребезга . 4. проверяем состояние порта (для защиты от случайных помех) 5. если состояние нужное - фиксируем нажатие. 6. по таймеру, с фиксированным (или нет) интервалом проверяем состояние порта 7. если по истечению N-проверок порт не менял состояние фиксирум нажатие длинны N. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 26 апреля, 2017 Опубликовано 26 апреля, 2017 · Жалоба Да вот я про это и говорю, если устройство, вдруг заглючит и перестанет реагировать на кнопку на порту - потребуется кнопка ресет, а она как раз доступна пользователю так как это одна и та же кнопка . Не, я как раз говорю, что вход RST/NMI у MSP430 кривой до ужаса и не является "честным" ресетом. Имеет полное право при определенных ситуациях не работать даже согласно документации. Просто до этого с F149 были проблемы с запуском. Там не то что ресет, передергивание питания не всегда помогало. Кардинально ничего они в серии MSP430F2x/4x не поменяли. Добавили BOR, подкрутили немного систему сброса и улучшили вочдог, так и не доведя его до действительно "честного". Так что иногда помогает только передергивание питания. Но это просто мой ответ на ваш вопрос: нет ли скрытых проблем в этой схеме? решать вам B) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 27 апреля, 2017 Опубликовано 27 апреля, 2017 · Жалоба Я вроде примерно также и описал: . . . Моя софтина по такой схеме тестируется уже около месяца - "завесы" в непонятном состоянии не замечены. Ресетный пин не трогался - ф-ия ресет. Проц - F5438A. ps - после отработки прерывания пин сигнала просто опрашивается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 28 апреля, 2017 Опубликовано 28 апреля, 2017 · Жалоба и улучшили вочдог, так и не доведя его до действительно "честного". Честных встроенных WDT не бывает. Потому что они все программно отключаемые/включаемые, а значит уже поэтому - не честные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 58 29 апреля, 2017 Опубликовано 29 апреля, 2017 · Жалоба Честных встроенных WDT не бывает. Потому что они все программно отключаемые/включаемые, а значит уже поэтому - не честные. Intel 8xC51GB, встроенный watchdog timer неотключаемый. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться