Внешнее прерывание INT
31.12.2016, 17:58
|
|
|
Заблокирован
Регистрация: 19.02.2007
Адрес: Барановичи
Сообщений: 255
Сказал спасибо: 3
Сказали Спасибо 51 раз(а) в 39 сообщении(ях)
|
Re: Внешнее прерывание INT
Сообщение от Alex9797
|
Неправильно.
_ я снимаю с ножек RB4...RB2) 0b...110..
|
Дико извиняюсь БАРИН, быдло я, в школе не учился, вот клаву подсунули, клацаю на знакомые букафки!
На ножках RB7 = 0, RB6 = 1, RB5 = 0
RB4 = RB6 = 0
RB3 = RB6 = 1
RB2 = RB6 = 0
Вы неверное только по чужим макросам прошивки пишите, а физику придумали идиоты, как и тормоза - трусы!!! Это не хамство, а аллегория!
|
|
|
|
31.12.2016, 18:29
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
|
Re: Внешнее прерывание INT
хм... насколько я помню, у этого МК на порту Бэ для прерываний (interrupt-on-change) выделены RB4 - RB7. И плюс на всем порту есть pull-up. Его хватает. Так вот, активацию строк делаем "нулем" на всех RB0 - RB3 одновременно, и следим, когда возникнут прерывания на RB4 - RB7 от перехода в "ноль" любой из этих линий. Когда прерывание возникло, сканируем строки "нулем" построчно, определяя в какой строке была зажата кнопка.
Диоды или резисторы в строках предохраняют от КЗ в момент сканирования строк при одновременном зажатии двух кнопок в разных строках.
|
|
|
|
Сказали "Спасибо" NewWriter
|
|
|
31.12.2016, 18:30
|
|
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,394
Сказал спасибо: 2,016
Сказали Спасибо 1,356 раз(а) в 591 сообщении(ях)
|
Re: Внешнее прерывание INT
Сообщение от ALEKS1102X
|
|
Вы неверное только по чужим макросам прошивки пишите, а физику придумали идиоты, как и тормоза - трусы!!! Это не хамство, а аллегория!
|
Блин, ну у вас же вроде это все в протеусе нарисовано?
Я бы на вашем месте проэмулировал, посмотрел, и потом
вежливо извинился. А вообще тут на чистый бан хватает. Но НГ, потому пока предупреждение.
__________________
[ жизнь приятна и красива, если выпить литр пива ]
|
|
|
|
31.12.2016, 18:53
|
|
|
Прописка
Регистрация: 04.09.2009
Сообщений: 167
Сказал спасибо: 1
Сказали Спасибо 35 раз(а) в 25 сообщении(ях)
|
Re: Внешнее прерывание INT
Сообщение от NewWriter
|
|
...Диоды или резисторы в строках предохраняют от КЗ в момент сканирования строк при одновременном зажатии двух кнопок в разных строках...
|
Очень устойчивое бредовое утверждение из старых времен. Для дискретной логики, где для сканирования строк/столбцов используются выводы счетчиков/дешифраторов, которые могут быть или входом, или выходом, наличие таких диодов однозначно необходимо. С МК, диоды на х. не нужны, достаточно правильно написать программу, чтобы в каждый момент времени выходом был лишь один вывод тогда никакое КЗ в принципе возникнуть не сможет. Эти басни про диоды и КЗ не пркращаются уже давно. Но если писать код через ж-пу, то и диодов может оказаться мало. Но все терминальные варианты подсчитать нереально.
|
|
|
|
31.12.2016, 18:58
|
|
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,394
Сказал спасибо: 2,016
Сказали Спасибо 1,356 раз(а) в 591 сообщении(ях)
|
Re: Внешнее прерывание INT
Сообщение от NewWriter
|
|
Когда прерывание возникло, сканируем строки "нулем" построчно, определяя в какой строке была зажата кнопка.
|
Как по мне, так сама идея прерываний для кнопок неудачна. Ну ни к чему это для кнопок - которые чисто физически не могут быть нажимаемы чаще чем 10 раз в секунду. Я бы сделал неторопливое, раз этак 50 в секунду - прерывание таймера и делал все там.
А если в устройстве, например, присутствует какая-нить динамическая индикация - вот к ней и прикрутить, на те же пины.
__________________
[ жизнь приятна и красива, если выпить литр пива ]
|
|
|
|
31.12.2016, 20:42
|
|
|
Заблокирован
Регистрация: 19.02.2007
Адрес: Барановичи
Сообщений: 255
Сказал спасибо: 3
Сказали Спасибо 51 раз(а) в 39 сообщении(ях)
|
Re: Внешнее прерывание INT
Да, Alex9797, Вы таки были правы, пошёл сейчас собакина выгуливать, а в голове всё крутится эта матрица.
Да, я обычно в своих разработка (в большей части) использую 4 кнопки - "esc, sel/ok, - и +". У меня входных ножек опроса две, а выходных (RB7...5) - три (это если использую динамическую индикацию, и выходные - это обычно управление кадодами светодиодного индикатора), и я обычно на трёх выходных шинах ставлю диоды (три штуки, для одной входной линии), а на второй входной не ставлю... Нужно было бы ещё 2 кнопки - ставил бы ещё 3 диода...
Для тех, кто спросит - почему не использую 4 выхода катодов (анодов) в качестве выхода, а одну ножку в качестве входа клавы - объясню: я приблизительно такую-же схему опроса клавы использую в устройствах с LCD индикаторм типа 16002 в четырёхбитном режиме передачи данных. Так вот там в схеме ножки DB6...DB4 я используб в качестве выходов для клавы, а ножку DB7 я использую в качестве ответа готовности индикатора, поэтому её не трогаю для клавы. В общем как-то так. В остальном написал так, ка оно есть, и работает мой алгоритм (может не мой, кто-то может такой алгоритм использует уже 800 лет) -безукоризненно. Для работы клавы никогда не использую отдельное прерывание, только по факту основных прерываний опрашиваю кнопки. И даже, если обработка клавы где-то задержится, то плюс-минус несколько десятков милисекунд на обработку нажатия кнопок, визуально никто не заметит...
Извините меня Alex9797, я лично Вас ни в коей мере не хотел обидеть, просто Вы сразу наехали - я и ответил, а могли бы просто объяснить где я накосячил. Водка вчера просто была сильно заборитстая, а вообще я же написал - "быдло я"!
|
|
|
|
31.12.2016, 21:15
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.12.2007
Сообщений: 1,198
Сказал спасибо: 70
Сказали Спасибо 80 раз(а) в 69 сообщении(ях)
|
Re: Внешнее прерывание INT
После нажатия кнопки нужно чётко отчитать определённое количество времени плюс такое же чёткое количество времени потратить на анти дребезг и там всё в притирку.
Одновременное нажатие максимум три и то не факт но этот факт вероятности достал уже нужно просто брать и делать. Тема конечно развернулась не на шутку но всем огромное спасибо кто принимают участие и в принципе вся тема индексируется поисковыми системами для молодёжи чтиво хоть одекватное не всё в институты деньги таскать.
|
|
|
|
31.12.2016, 21:23
|
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Внешнее прерывание INT
Сообщение от vavan1983
|
|
Одновременное нажатие максимум три и то не факт но этот факт вероятности достал уже нужно просто брать и делать.
|
В этом отношении неплохи МК от Nuvoton. Там кнопочная хня на уровне железа. Ну да, понимаю, у некоторых сейчас истерика от слова АРМ разразится. Ну и таймерами, если их много, можно хардварно разруливать. Ах, да, опять не тот случай. Ну тогда тупо поллинг порта, ничего и не остаётся.
|
|
|
|
31.12.2016, 21:33
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.12.2007
Сообщений: 1,198
Сказал спасибо: 70
Сказали Спасибо 80 раз(а) в 69 сообщении(ях)
|
Re: Внешнее прерывание INT
STM32F0, на эту тему вам уже говаривал что если такие ресурсы понадобятся то не куда не денусь освою. Ну показали раз два в теме ну навязывать то зачем. Представьте мне знающему pic быстро перейти на что либо другое.
|
|
|
|
31.12.2016, 21:36
|
|
|
Заблокирован
Регистрация: 19.02.2007
Адрес: Барановичи
Сообщений: 255
Сказал спасибо: 3
Сказали Спасибо 51 раз(а) в 39 сообщении(ях)
|
Re: Внешнее прерывание INT
Сообщение от vavan1983
|
|
После нажатия кнопки нужно чётко отчитать определённое количество времени плюс такое же чёткое количество времени потратить на анти дребезг и там всё в притирку.
|
Так может по-подробнее объясните в чём там ограничения в работе клавы, или же у Вас сама программа написана по принципу: самое главное действо - это нажатие кнопок, а после уже исполнение???
Просто обычно клава - это глубоко и далеко второстепенное...
Можно в личку.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:56.
|
|