Мелкие вопросы по МК и ПЛИС.
- Сообщения: 29
- Зарегистрирован: Вт май 04, 2010 13:30:48
Парни "памагите)))" Голова пуxнет, не въеду никак: есть внешнее прерывание INT0(кнопка), если (её нужно зажимать по условию на 10 с.) я зажму кнопку как мне работать дальше???? Получается программа зависнет пока кнопку не отжать???? Прерывания запрещать нельзя, тикает таймер TIM0_OVF_vect и считает секунды.
- Реклама
- Сообщения: 29
- Зарегистрирован: Вт май 04, 2010 13:30:48
В каком обработчике? Я наживаю кнопку загорается светодиод (установил его как маяк, внутри прерывания INT0_Vect) и все,он горит пока не отпустишь кнопку, соответственно МК в это время висит.
если по колхозному... то в прерывании (по спаду) разрешаешь прерывания, включаешь маяк и ставишь цикл, пока кнопка нажата... потом гасишь маяк, всё. так и кнопка работает и секунды идут...
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
- Сообщения: 29
- Зарегистрирован: Вт май 04, 2010 13:30:48
И как я узнаю что кнопка зажата 10 с. если я ставлю прерывание по спаду? Отжала и загорелся светодиод, накой он мне нужен без кнопки? Это все легко решается прерыванием PCINT0_vect.
Но вопрос в том, если INT0_Vect зависает МК ,то его нужно назвать не прерывание, а зависание?? Или как бороться с таким явлением? Удивительно что никто не задавался таким вопросом.
Но вопрос в том, если INT0_Vect зависает МК ,то его нужно назвать не прерывание, а зависание?? Или как бороться с таким явлением? Удивительно что никто не задавался таким вопросом.
- Реклама
прямо изнутри этого цикла можешь на часы поглядывать...
Добавлено after 1 minute 55 seconds:
ещё раз: прерывание завесит контроллер, если I==0, если I==1, то другое прерывание сможет прервать это прерывание и выполниться
Добавлено after 2 minutes 24 seconds:
при вызове прерывания I=0 (это происходит аппаратно, для того чтобы прерывания не выполнялись одновременно или прерывание не могло вызваться многократно и сорвать стек), при завершении прерывания I аппаратно возвращается в 1. но никто не мешает взвести его программно...
Добавлено after 3 minutes 53 seconds:
но это если знаешь, что делаешь... (нужно исключить возможность многократного вызова одного и того же прерывания, в вашем случае кнопку не получится нажать раньше, чем она будет отпущена...)
Добавлено 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
Ага, т.е. я в прерывании включаю прерывание(сбрасываю флаг запрета?), в итоге мой светодиод горит и счетчик тикает. Xотя где то читал что прерывание в прерывании может глюкнуть, но для моей задачи не страшно. Опыта мало, вот и набираюсь)
- Сообщения: 721
- Зарегистрирован: Сб ноя 16, 2013 23:34:34
С наслаждением прочёл последний десяток сообщений stason1982 и Ivanoff-iv. Давно так не смеялся
Особенно доставило
, иstason1982 писал(а):Удивительно что никто не задавался таким вопросом.
Пишите ещё!Ivanoff-iv писал(а):если I==1, то другое прерывание сможет прервать это прерывание
Уважаемый ААХ, если бы Вы читали внимательно, то увидели что я и начал тему с:[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3560495#p3560495"]если по колхозному...[/uquote], а вместо того, чтобы смеяться, взяли бы, да объяснили котёнку, как писать правильно, и чтобы он не послал всё это программирование... (ведь тут придется с нуля сами принципы написания кода переосмыслить, уверен он и до этого дорастет и до РТОС, возможно..., точно уверен, что кнопки на прерываниях перерастёт сразу, как только кнопок потребуется больше, чем доступно прерываний
)
пс: я сам иногда использую вложенные прерывания (хоть и знаю, что это "неправильно"), но я знаю где это возможно и что нужно предпринять, чтобы не случился айяйяй...
пс: я сам иногда использую вложенные прерывания (хоть и знаю, что это "неправильно"), но я знаю где это возможно и что нужно предпринять, чтобы не случился айяйяй...
- Сообщения: 721
- Зарегистрирован: Сб ноя 16, 2013 23:34:34
[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3562569#p3562569"]кнопки на прерываниях перерастёт сразу, как только кнопок потребуется больше, чем доступно прерываний
[/uquote]а как же быть, если кнопок больше, чем доступно прерываний?
целая тема про это есть
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
- Сообщения: 721
- Зарегистрирован: Сб ноя 16, 2013 23:34:34
В приведённой Вами теме обсуждаются помимо данного вопроса другие, не менее важные, типа, "как включить подтягивающий резистор". Ваш ответ станет читать подрастающее поколение. Большинство современных молодых людей страдают синдромом рассеянного внимания, и могут не осилить 16 страниц. Не могли бы Вы коротко, конспективно, так сказать, обозначить путь решения проблемы прямо в этой теме?
по МК существуют специализированные форумы, если есть конкретный затык и никак не получается самостоятельно разобраться, то народ там всегда подскажет.
тут же общение на тему.
тут же общение на тему.
ZZZ С Нами Бог ZZZ
Коротко: неверный изначально концепт, который нужно полностью переделывать. Необходимо производить опрос состояния клавиатуры по периодическому прерыванию (например, от таймера), а не вызывать прерывание кнопкой, которая либо зажимается, либо дребезжит.AAX писал(а):Не могли бы Вы коротко, конспективно, так сказать, обозначить путь решения проблемы прямо в этой теме?
Работа клавиатур Радио-86РК, ZX-Spectrum, Орион-128 и подобных хорошо описана в литературе, ваша задача только найти и ознакомиться...
- Сообщения: 721
- Зарегистрирован: Сб ноя 16, 2013 23:34:34
[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 внутри, кнопки вешают на АЦП. Опрос состояния кнопок по таймеру ничем не отличается от опроса по внешнему прерыванию.
[uquote="Slabovik",url="/forum/viewtopic.php?p=3563110#p3563110"]Необходимо производить опрос состояния клавиатуры по периодическому прерыванию[/uquote]на "фабричных" устройствах с кучей кнопок, и совсем фуфельными AVR внутри, кнопки вешают на АЦП. Опрос состояния кнопок по таймеру ничем не отличается от опроса по внешнему прерыванию.
Последний раз редактировалось AAX Пн фев 04, 2019 11:07:07, всего редактировалось 1 раз.
Тогда мне вообще не понятно, зачем вы присоединились к стенаниям stason1982 
Взяли бы, да и объяснили человеку...
Взяли бы, да и объяснили человеку...
Просто подобные темы всплывают на форуме уж слишком регулярно...
ААХ если Вам ещё актуально, тут накинули несколько готовых вариантов... пользуйтесь...
ААХ если Вам ещё актуально, тут накинули несколько готовых вариантов... пользуйтесь...
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
- Сообщения: 721
- Зарегистрирован: Сб ноя 16, 2013 23:34:34
я даже 16 страниц первой темы просмотрел. Там было пару дельных советов - просто не совать пальцы в розетку километровые куски кода с бестолковыми wait циклами по пол-секунды в прерывания. Но это, видимо, не путь джедаев
джедаи сами упражняются в "прерывании прерываний", и тому же учат бестолковых детей. Ну, надо отметить, дети сами виноваты.
[uquote="Slabovik",url="/forum/viewtopic.php?p=3563160#p3563160"]Тогда мне вообще не понятно, зачем[/uquote]Ну, по началу оно смешно было
Но авторы скисли чот.
[uquote="Slabovik",url="/forum/viewtopic.php?p=3563160#p3563160"]Тогда мне вообще не понятно, зачем[/uquote]Ну, по началу оно смешно было
В РК-86 вообще нет прерываний. Клавиатура опрашивается по запросу от программы к подпрограмме МОНИТОРа или своими силами. История нажатий, аки в писюке ни предусмотрена.
Суть не в том, что есть прерывания или нет, а в том, что не кнопка (клавиатура) управляет процессором, а процессор периодически опрашивает кнопку, следя за её состоянием.
Ну, а с прерываниями это просто удобнее - появляется почти полная независимость от исполняемого кода.
Ну, а с прерываниями это просто удобнее - появляется почти полная независимость от исполняемого кода.


