В связи с тем что шум величина случайная и Время между сработкой компаратора тоже случайно. Для большего разброса параметров можно с вывода ШИМ через интегрирующую цепочку завести на внешний компаратор или усилитель.
_________________ Я тоже белый и пушистый и также как и Вы ловлю мышей. С уважением ВНН.
Еще один вариант .По приходу имп. на компаратор считываем значение шим и делим на переменную в какомто заданном диапазоне (вставленно в основной цыкл).Время прихода импульса неизвестно,значит и количество циклов тоже, каки и число делителя.Более простое решение больше на ум неприходит.
_________________ Я тоже белый и пушистый и также как и Вы ловлю мышей. С уважением ВНН.
Что делаю не так? после обработки PP.1, MK уходит в перезагрузку,, решил проблему, безусловным переходом по Лейблу.1, все работает, но надо же разобраться, тем более, что шевеление портами в теле Подпрограммы прерывания и штатный выход из оной к критическим действиям не приводит И еще проблемка, порт подтянут через 10к к +5В. Замучал дребезг кантактов, отрабатывал в Протеусе, все изумительно, на живом устройстве, то срабатывает, потом отключается, то не срабатывает, то по нескольку раз, как с этим бороться, время задержки менял до 1сек Зы кошачий таймер на перезагрузку влиять не может, стоит с максимальным делителем и отслежмвается, не он точно, уже убирал
Скорее всего тебн не хватает стека Это параметрв то умолчанию $hwstack = 32 ' default use 32 for the hardware stack $swstack = 10 ' default use 10 for the SW stack $framesize = 40 ' default use 40 for the frame space
Как-то смущает меня переход по goto а возврат по return. Может стоит по gosub уйти?
_________________ "Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Как-то смущает меня переход по goto а возврат по return. Может стоит по gosub уйти?
Волшебник!!! и чего я сразу не сделал, раньше все метки декларировал как ПП, а тут поленился Благодарю Осталось теперь только с дребезгом контактов разобраться
Последний раз редактировалось saschai Ср фев 16, 2011 12:01:04, всего редактировалось 1 раз.
Ну вот и славно. Я вот не знаю, возможно и без проблем работает, но мне как-то спокойнее, если на метку по goto то возращаться тогда тоже goto в рабочий цикл. Ну а return он же как возврат из подпрограммы. Ну и из прерывания, разумеется.
А вот с дребезгом пока не понятно. Даже если и флаг от дребезга ловится, то в любом случае он сбрасывается перед выходом. Есть конечно место после сброса, пока сторожевой таймер обнуляется, но так и задержка огромная.... Впрочем, я всегда антидребезг ставлю в самом начале, а сброс флага непосредственно перед выходом.
_________________ "Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Можно кусочек кода глянуть? Наверное придераюсь , приввыык работать с DEBOUNCE, и наплевать на длительное удержание, читал, что можно сие использовать при обработке прерывания, вот только не знаю как Перенос задержки в начало ПП прерывания слегка улучшил ситуациюю. но в корне не изменил, может у меня кнопки не правильные
Ты прав, ГОТО-РЕТУРН, не работает!!! Проверил в др. месте, не задикларировав ПП, тоже получил вылет.! Недавно подсмотрел в чужом листинге , а поскольку програмка получилась обширной, в некоторых случаях, поленился декларировать ПП, а где работает , посмотрел, что у меня организован, безусловный переход на метку
И еще один вопросик, про грамотный синтаксис описание включения сторожевого таймера, в основном коввыряюсь в АСМе с Пиками, там все просто, ставлю бит конфигурации и делитель однойй строкой, поппробывал в АВР, для протеуса все катит, но на реальной меге8, МК безвозратно виснет, в фьюзах WTDON, не программирую. а пользую
Действительно, если просто обрабатывать прерывание (даже с антидребезгом), то есть повторные срабатывания. И как я понимаю, происходят они в момент отпускания кнопки. То бишь прерывание уже отработано, а кнопку мы держим, и в момент отпускания из-за дребезга оно снова идет обрабатываться.
Код:
$regfile = "attiny2313.dat" $crystal = 4000000
'----------
Config Porta.1 = Output ' светодиод Config Pind.2 = Input ' INT0 Const Debouncetime = 150 ' 150 мс Led Alias Porta.1 Led = 0
Toggle Led Waitms Debouncetime ' антидребезг Eifr = 64 ' сбрасываем флаг
Return
End
Я не видел подобных решений, но в процессе экспериментов получилось, что полностью убирает ложные срабатывания только проверка на удержание кнопки, непосредственно перед очисткой флага прерывания.
Код:
Button:
Waitms Debouncetime ' антидребезг Toggle Led
While Pind.2 = 0 ' если кнопка удерживается Waitms Debouncetime Wend ' крутимся здесь
Eifr = 64 ' сбрасываем флаг
Return
P.S. C удовольствием посмотрел бы другие решения.
_________________ "Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
И еще один вопросик, про грамотный синтаксис описание включения сторожевого таймера
Ну по регистру вроде все правильно... Хотя, в баскоме есть свои плюшки
Код:
Config Watchdog = 2048 Start Watchdog
Reset Watchdog
Но судя по симулятору пишется в регистр все так же.
_________________ "Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Это создаст фатальные проблемы со стеком, что приведёт к краху программы!
Ну оно и приводит к краху, так что все хорошо.
_________________ "Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Я не видел подобных решений, но в процессе экспериментов получилось, что полностью убирает ложные срабатывания только проверка на удержание кнопки, непосредственно перед очисткой флага прерывания.
Шаман, однако, вчера просмотрел кучу листингов такого не видел, реально работает, и работает на ура! Благодарю! сейчас попробую с таймером, протеус глотает все без проблем, а вот на реальном МК, виснет, причем малая часть кода исполняется
Проверил сейчас в железе на тиньке, работает сторожевой таймер средствами баском. Пока сбрасывается - все нормально. Не сбрасывается - перезагружается. Все как и положено.
_________________ "Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Как пприятно напрячь, умного человека , с тем, чем мучался два дня, решилось за пол часа Огромная благодарность! Действительно средствами Васика все работает и в железе и в Симе, просто вчера перерыл весь он-лайн и офф хелп и кроме как упоменание в командах асм WDR, ничего не нашел.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 614
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения