Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Вт май 04, 2010 13:30:48

Сообщение stason1982 »

Парни "памагите)))" Голова пуxнет, не въеду никак: есть внешнее прерывание INT0(кнопка), если (её нужно зажимать по условию на 10 с.) я зажму кнопку как мне работать дальше???? Получается программа зависнет пока кнопку не отжать???? Прерывания запрещать нельзя, тикает таймер TIM0_OVF_vect и считает секунды.
Реклама
akl
Друг Кота
Сообщения: 4473
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Никто не мешает разрешить прерывания в обработчике.
SEI
Реклама
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Вт май 04, 2010 13:30:48

Сообщение stason1982 »

В каком обработчике? Я наживаю кнопку загорается светодиод (установил его как маяк, внутри прерывания INT0_Vect) и все,он горит пока не отпустишь кнопку, соответственно МК в это время висит.
Друг Кота
Аватара пользователя
Сообщения: 7083
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

если по колхозному... то в прерывании (по спаду) разрешаешь прерывания, включаешь маяк и ставишь цикл, пока кнопка нажата... потом гасишь маяк, всё. так и кнопка работает и секунды идут...
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Реклама
Эиком - электронные компоненты и радиодетали
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Вт май 04, 2010 13:30:48

Сообщение stason1982 »

И как я узнаю что кнопка зажата 10 с. если я ставлю прерывание по спаду? Отжала и загорелся светодиод, накой он мне нужен без кнопки? Это все легко решается прерыванием PCINT0_vect.
Но вопрос в том, если INT0_Vect зависает МК ,то его нужно назвать не прерывание, а зависание?? Или как бороться с таким явлением? Удивительно что никто не задавался таким вопросом.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7083
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

прямо изнутри этого цикла можешь на часы поглядывать...

Добавлено after 1 minute 55 seconds:
ещё раз: прерывание завесит контроллер, если I==0, если I==1, то другое прерывание сможет прервать это прерывание и выполниться

Добавлено after 2 minutes 24 seconds:
при вызове прерывания I=0 (это происходит аппаратно, для того чтобы прерывания не выполнялись одновременно или прерывание не могло вызваться многократно и сорвать стек), при завершении прерывания I аппаратно возвращается в 1. но никто не мешает взвести его программно...

Добавлено after 3 minutes 53 seconds:
но это если знаешь, что делаешь... (нужно исключить возможность многократного вызова одного и того же прерывания, в вашем случае кнопку не получится нажать раньше, чем она будет отпущена...)
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Реклама
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Вт май 04, 2010 13:30:48

Сообщение stason1982 »

Ага, т.е. я в прерывании включаю прерывание(сбрасываю флаг запрета?), в итоге мой светодиод горит и счетчик тикает. Xотя где то читал что прерывание в прерывании может глюкнуть, но для моей задачи не страшно. Опыта мало, вот и набираюсь)
AAX
Опытный кот
Сообщения: 721
Зарегистрирован: Сб ноя 16, 2013 23:34:34

Сообщение AAX »

С наслаждением прочёл последний десяток сообщений stason1982 и Ivanoff-iv. Давно так не смеялся :) Особенно доставило
stason1982 писал(а):Удивительно что никто не задавался таким вопросом.
, и
Ivanoff-iv писал(а):если I==1, то другое прерывание сможет прервать это прерывание
Пишите ещё!
Друг Кота
Аватара пользователя
Сообщения: 7083
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

Уважаемый ААХ, если бы Вы читали внимательно, то увидели что я и начал тему с:[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3560495#p3560495"]если по колхозному...[/uquote], а вместо того, чтобы смеяться, взяли бы, да объяснили котёнку, как писать правильно, и чтобы он не послал всё это программирование... (ведь тут придется с нуля сами принципы написания кода переосмыслить, уверен он и до этого дорастет и до РТОС, возможно..., точно уверен, что кнопки на прерываниях перерастёт сразу, как только кнопок потребуется больше, чем доступно прерываний :) )
пс: я сам иногда использую вложенные прерывания (хоть и знаю, что это "неправильно"), но я знаю где это возможно и что нужно предпринять, чтобы не случился айяйяй...
AAX
Опытный кот
Сообщения: 721
Зарегистрирован: Сб ноя 16, 2013 23:34:34

Сообщение AAX »

[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3562569#p3562569"]кнопки на прерываниях перерастёт сразу, как только кнопок потребуется больше, чем доступно прерываний :)[/uquote]а как же быть, если кнопок больше, чем доступно прерываний?
Друг Кота
Аватара пользователя
Сообщения: 7083
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

целая тема про это есть
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
AAX
Опытный кот
Сообщения: 721
Зарегистрирован: Сб ноя 16, 2013 23:34:34

Сообщение AAX »

В приведённой Вами теме обсуждаются помимо данного вопроса другие, не менее важные, типа, "как включить подтягивающий резистор". Ваш ответ станет читать подрастающее поколение. Большинство современных молодых людей страдают синдромом рассеянного внимания, и могут не осилить 16 страниц. Не могли бы Вы коротко, конспективно, так сказать, обозначить путь решения проблемы прямо в этой теме?
Друг Кота
Аватара пользователя
Сообщения: 3506
Зарегистрирован: Пн июл 23, 2018 10:36:20
Откуда: Казань

Сообщение SSkot »

по МК существуют специализированные форумы, если есть конкретный затык и никак не получается самостоятельно разобраться, то народ там всегда подскажет.
тут же общение на тему.
ZZZ С Нами Бог ZZZ
Друг Кота
Аватара пользователя
Сообщения: 17234
Зарегистрирован: Чт апр 04, 2013 12:46:59
Откуда: Тюмень

Сообщение Slabovik »

AAX писал(а):Не могли бы Вы коротко, конспективно, так сказать, обозначить путь решения проблемы прямо в этой теме?
Коротко: неверный изначально концепт, который нужно полностью переделывать. Необходимо производить опрос состояния клавиатуры по периодическому прерыванию (например, от таймера), а не вызывать прерывание кнопкой, которая либо зажимается, либо дребезжит.

Работа клавиатур Радио-86РК, ZX-Spectrum, Орион-128 и подобных хорошо описана в литературе, ваша задача только найти и ознакомиться...
Контактная информация:
AAX
Опытный кот
Сообщения: 721
Зарегистрирован: Сб ноя 16, 2013 23:34:34

Сообщение AAX »

[uquote="Slabovik",url="/forum/viewtopic.php?p=3563110#p3563110"]Работа клавиатур Радио-86РК, ZX-Spectrum, Орион-128 и подобных хорошо описана в литературе, ваша задача только найти и ознакомиться...[/uquote]С работой клавиатур Радио-86РК и "подобных" спектрум-совместимых клонов я ознакомился около 30-ти лет назад, когда они мне были интересны. У 8080 нет GPIO, опрос (и передача) состояния клавиатуры осуществляется контроллером. Причём тут "кнопок больше, чем прерываний"? Вроде, взрослый человек, а туда же... ;)
[uquote="Slabovik",url="/forum/viewtopic.php?p=3563110#p3563110"]Необходимо производить опрос состояния клавиатуры по периодическому прерыванию[/uquote]на "фабричных" устройствах с кучей кнопок, и совсем фуфельными AVR внутри, кнопки вешают на АЦП. Опрос состояния кнопок по таймеру ничем не отличается от опроса по внешнему прерыванию.
Последний раз редактировалось AAX Пн фев 04, 2019 11:07:07, всего редактировалось 1 раз.
Друг Кота
Аватара пользователя
Сообщения: 17234
Зарегистрирован: Чт апр 04, 2013 12:46:59
Откуда: Тюмень

Сообщение Slabovik »

Тогда мне вообще не понятно, зачем вы присоединились к стенаниям stason1982 :dont_know:
Взяли бы, да и объяснили человеку...
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 7083
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

Просто подобные темы всплывают на форуме уж слишком регулярно...
ААХ если Вам ещё актуально, тут накинули несколько готовых вариантов... пользуйтесь...
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
AAX
Опытный кот
Сообщения: 721
Зарегистрирован: Сб ноя 16, 2013 23:34:34

Сообщение AAX »

я даже 16 страниц первой темы просмотрел. Там было пару дельных советов - просто не совать пальцы в розетку километровые куски кода с бестолковыми wait циклами по пол-секунды в прерывания. Но это, видимо, не путь джедаев :) джедаи сами упражняются в "прерывании прерываний", и тому же учат бестолковых детей. Ну, надо отметить, дети сами виноваты.
[uquote="Slabovik",url="/forum/viewtopic.php?p=3563160#p3563160"]Тогда мне вообще не понятно, зачем[/uquote]Ну, по началу оно смешно было :) Но авторы скисли чот.
Друг Кота
Сообщения: 5066
Зарегистрирован: Вс фев 15, 2009 01:04:58
Откуда: Kaluga

Сообщение Wladimir_TS »

В РК-86 вообще нет прерываний. Клавиатура опрашивается по запросу от программы к подпрограмме МОНИТОРа или своими силами. История нажатий, аки в писюке ни предусмотрена.
Друг Кота
Аватара пользователя
Сообщения: 17234
Зарегистрирован: Чт апр 04, 2013 12:46:59
Откуда: Тюмень

Сообщение Slabovik »

Суть не в том, что есть прерывания или нет, а в том, что не кнопка (клавиатура) управляет процессором, а процессор периодически опрашивает кнопку, следя за её состоянием.
Ну, а с прерываниями это просто удобнее - появляется почти полная независимость от исполняемого кода.
Контактная информация:
Ответить

Вернуться в «Разные вопросы по МК»