Работа с прерываниями - Страница 3 - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 3 из 4«1234»
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Работа с прерываниями
Работа с прерываниями
ivan_fd Дата: Чт, 14.04.2016, 10:26  |                                                                                                                Сообщение # 31
Группа: Модераторы
Ранг:  Специалист
Сообщений: 882
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Anatoliy1000
Во первых, забудьте о программных прерываниях. Я вообще не понимаю, зачем разработчики придумали такую фигню.
Хотя они не совсем то и программные, но лучше их не использовать.
А так, в общем все работает. Посмотрите внимательно на измененную программу и файл протеуса.
Прикрепления: 4951244.zip(130Kb)


Меня все время преследуют умные мысли...но я быстрее!!!
ЯНДЕКС Дата: 14.04.2016
Anatoliy1000 Дата: Чт, 14.04.2016, 11:32  |                                                                                                                Сообщение # 32
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 39
Репутация: 0   ±
Замечания:   ±
На сайте с 02.03.2016

Статус: Offline

Только сейчас понял что мне нужны все таки аппаратные прерывания. Т.е. нажал на кнопку - сработало. И то как я понимаю, что можно реализовать чтением 1 или 0 на ноге, но так можно пропустить сигнал. 1.Вообщем я чего-то запутался. Есть простой пример аппаратного прерывания?
2.Как в моем примере на этот порт повесить несколько кнопок? Вешаю и х/з что получается.
3. ivan_fd, не понял почему заработало с командами:Context Save и Context Restore, где вы их взяли?
Прикрепления: 6505200.rar(40Kb)


Я новичок. За помощь стараюсь плюсовать репутацию (пока других способов сказать спасибо не знаю).
Сообщение отредактировал Anatoliy1000 - Чт, 14.04.2016, 11:35
ivan_fd Дата: Чт, 14.04.2016, 11:51  |                                                                                                                Сообщение # 33
Группа: Модераторы
Ранг:  Специалист
Сообщений: 882
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Цитата Anatoliy1000 ()
где вы их взяли?


В мануале к протону про это написано. Сохранение контекста, то есть
сохранение регистра аккумулятора, status....


Меня все время преследуют умные мысли...но я быстрее!!!
Володимир Дата: Чт, 14.04.2016, 11:55  |                                                                                                                Сообщение # 34
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 85
Репутация: 3   ±
Замечания:   ±
На сайте с 22.04.2010

Статус: Offline

Цитата Anatoliy1000 ()
3. ivan_fd, не понял почему заработало с командами:Context Save и Context Restore, где вы их взяли?Прикрепления: 6505200.rar(40Kb)
Код программы переписан с использованием аппаратных прерываний.
Anatoliy1000 Дата: Пт, 15.04.2016, 11:34  |                                                                                                                Сообщение # 35
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 39
Репутация: 0   ±
Замечания:   ±
На сайте с 02.03.2016

Статус: Offline

1. Понял, что отдельно не нужно писать подпрограмму прерываний, можно в основном "теле" опрашивать флаг. Возможно ошибаюсь?
2. Как на это прерывание повесить несколько кнопок? Пример в книге протон+ИД смотрел, там надо через кондюк и + на ноге делать, замыкание вешать на землю. Тогда прерывание не "ловится". Есть какое-то простое решение?
Прикрепления: ___.rar(57Kb)


Я новичок. За помощь стараюсь плюсовать репутацию (пока других способов сказать спасибо не знаю).
Володимир Дата: Пт, 15.04.2016, 12:17  |                                                                                                                Сообщение # 36
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 85
Репутация: 3   ±
Замечания:   ±
На сайте с 22.04.2010

Статус: Offline

Цитата Anatoliy1000 ()
1. Понял, что отдельно не нужно писать подпрограмму прерываний, можно в основном "теле" опрашивать флаг. Возможно ошибаюсь?
Смысл прерывания (апаратного) в том, что при его возникновении, основной цыкл программы останавливается и идет выполнение обработчика прерываний. Просто опришивать флаг тоже можно, но его нужно програмно сбрасывать после обработки.
ADMIN Дата: Пт, 15.04.2016, 13:23  |                                                                                                                Сообщение # 37
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

По этому вопросу рекомендую посмотреть эту статью. Никто не читает статьи?
Anatoliy1000 Дата: Пт, 15.04.2016, 14:39  |                                                                                                                Сообщение # 38
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 39
Репутация: 0   ±
Замечания:   ±
На сайте с 02.03.2016

Статус: Offline

ADMIN, спасибо.
Вот еще что интересно.
Делаю простую схему на основе этого Pot PORTB.1, 100 - все как по учебнику. Так эта штука "прыгает" и "счетчик" нажатий делает накрутку срабатываний кнопки. Какие-то есть решения от ложных срабатываний? Это я для МК на котором мало ног...

По поводу читки статей (не в обиду, а только для улучшения Вашего ресурса):
Прикрепления: 1144222.rar(59Kb) · 0614078.jpg(168Kb) · 0805874.jpg(204Kb)


Я новичок. За помощь стараюсь плюсовать репутацию (пока других способов сказать спасибо не знаю).
Сообщение отредактировал Anatoliy1000 - Пт, 15.04.2016, 14:43
Володимир Дата: Пт, 15.04.2016, 14:47  |                                                                                                                Сообщение # 39
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 85
Репутация: 3   ±
Замечания:   ±
На сайте с 22.04.2010

Статус: Offline

Цитата Anatoliy1000 ()
Какие-то есть решения от ложных срабатываний?
Есть такая команда Button, попробуйте.

Добавлено (15.04.2016, 14:47)
---------------------------------------------
Example
Dim BtnVar as Byte ' Workspace for Button instruction.
Loop: ' Go to NoPress unless BtnVar = 0.
Button 0, 0, 255, 250, BtnVar, 0, NoPress
Print "* "
NoPress:
Goto Loop

Anatoliy1000 Дата: Пт, 15.04.2016, 14:51  |                                                                                                                Сообщение # 40
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 39
Репутация: 0   ±
Замечания:   ±
На сайте с 02.03.2016

Статус: Offline

расшифровку бы, написанного... не нашел эту команду в учебнике(
если это про антидребезг, так я скинул пример (в архиве), там нет дребизга, там шумы, то есть устранять наверно надо не программно, а железом?


Я новичок. За помощь стараюсь плюсовать репутацию (пока других способов сказать спасибо не знаю).
Сообщение отредактировал Anatoliy1000 - Пт, 15.04.2016, 14:55
Володимир Дата: Пт, 15.04.2016, 14:56  |                                                                                                                Сообщение # 41
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 85
Репутация: 3   ±
Замечания:   ±
На сайте с 22.04.2010

Статус: Offline

Цитата Anatoliy1000 ()
расшифровку бы, написанного... не нашел эту команду в учебнике(
В протоне есть файлик C:\Program Files\ProtonIDE\PDS\Docs\1 - Proton Compiler Manual.pdf
Там весь мануал по протону, если не найдете то брошу кусок текста.
Anatoliy1000 Дата: Сб, 16.04.2016, 12:21  |                                                                                                                Сообщение # 42
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 39
Репутация: 0   ±
Замечания:   ±
На сайте с 02.03.2016

Статус: Offline

1. Как я понял. Наиболее оптимально повесить несколько кнопок на одну ножку через АЦП.
2. В МК 16Ф628 такой возможности не обнаружил. Но у меня есть МК 12Ф675. Вот только не знаю как там это реализовать. Ведь на 16Ф628 я выводил ножки на дисплей и видел значения переменных.
3. Хочется попробовать "подвешивание" нескольких кнопок на одну ножку через АЦП в 12Ф675. С чего начать?
Есть код


Есть наброски в протеусе. Что делать дальше?

Вообще забрел в какую-то "засаду". Не могу по изменению уровня сигнала зажечь светодиод. С ума скоро сойду. Прошу помощи зала.

Прикрепления: 4293679.jpg(108Kb) · servo3.pdsprj.f254598308758989_(18Kb) · servo1.bas(8Kb) · servo3.pdsprj.f062026802845512_(18Kb)


Я новичок. За помощь стараюсь плюсовать репутацию (пока других способов сказать спасибо не знаю).
Сообщение отредактировал Anatoliy1000 - Сб, 16.04.2016, 14:53
xvovanx Дата: Сб, 16.04.2016, 17:28  |                                                                                                                Сообщение # 43
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 247
Репутация: 12   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Цитата Anatoliy1000 ()
Не могу по изменению уровня сигнала зажечь светодиод

По твоей схеме и не получится. У тебя нет в схеме делителя относительно корпуса. При любом нажатии у тебя на входе будет все равно +U. Пику без разницы через 5к,10к или 15к его притянут к плюсу (хоть 100к), входной ток ничтожно мал. Глянь мою схемку, там делитель относительно земли и при нажатии разных кнопок на входе пика получаем 0, 1/3U, 1/2U, 2/3U.

P.S. технически правильнее в схемах входы пиков подтягивать к плюсу через внутренние или внешние сопротивления, а кнопкой замыкать входы на землю. Твоя схема в железе никогда не будет работать нормально, т.к. свободный (непритянутый) вход сам (и без нажатой кнопки) станет плюсом с дребезгом впридачу и лишним "жором" энергии.
Прикрепления: 8700839.jpg(171Kb)

Сообщение отредактировал xvovanx - Сб, 16.04.2016, 17:50
Anatoliy1000 Дата: Сб, 16.04.2016, 21:26  |                                                                                                                Сообщение # 44
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 39
Репутация: 0   ±
Замечания:   ±
На сайте с 02.03.2016

Статус: Offline

xvovanx, кое как методом тыка вышел на такое



1. Проблема в том, что возможно в железе как вы отметили не пойдет, но с места не могу сдвинуться...
2. Прерывания по: изменению уровня на ноге и по инту вообще не фурычат.
Такое впечатление, как будь-то вернулся к знаниям месячной давности (100 шагов назад).
3. Мигалка вообще 2 раза срабатывает при любом раскладе. Хотя в проге 1 раз смена 1-0 или 0-1.
Прикрепления: servo3.pdsprj.f480594627916526_(19Kb)


Я новичок. За помощь стараюсь плюсовать репутацию (пока других способов сказать спасибо не знаю).
Сообщение отредактировал Anatoliy1000 - Сб, 16.04.2016, 21:27
dimvad Дата: Сб, 16.04.2016, 22:29  |                                                                                                                Сообщение # 45
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 61
Репутация: 9   ±
Замечания:   ±
На сайте с 20.07.2012

Статус: Offline

Код
If   ADIn 2   = 32704
Максимальный результат 10-битного преобразования это 2^10 - 1, те 1023
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Работа с прерываниями
Страница 3 из 4«1234»
Поиск: