|
Внешнии прерывания atmega8L, трабл с перрыванием |
|
|
|
Nov 9 2011, 21:05
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 1-11-11
Пользователь №: 68 094

|
Прописал прерывание по спаду на INT0, а оно вызывается два раза подрят, причем когда отсоединяю землю еще два раза, пробовал и высокий уровень через 5кОм, и задержку менять, ничего не помогает(((( пишет подряд две "G" Код #include <io.h> #include <delay.h> extern void wrlcd(int rsi, int rwi, int arg); extern void initlcd(); int i=0; char fl=1; interrupt [EXT_INT0] int_0(void){ wrlcd(1,0,(int)'G'); delay_ms(200); } void main(){ delay_ms(100); initlcd(); wrlcd(1,0,(int)'E'); wrlcd(1,0,(int)'C'); DDRD.2=0; //порт с INT0 на вход PORTD.2=1; //подтяжка MCUCR=0b00000010; //прерывание по спаду GICR=0b01000000; //врубаю INT0 #asm("sei") while(1){ delay_ms(200); } } ХЭЛП
|
|
|
|
|
 |
Ответов
|
Nov 10 2011, 09:55
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 1-11-11
Пользователь №: 68 094

|
Код #include <io.h> #include <delay.h> extern void wrlcd(int rsi, int rwi, int arg); extern void initlcd(); int i=0; char fl=1; interrupt [EXT_INT0] int_0(void){ wrlcd(1,0,(int)'G'); delay_ms(200); } void main(){ delay_ms(100); initlcd(); wrlcd(1,0,(int)'E'); wrlcd(1,0,(int)'C'); DDRD.2=0; //порт с INT0 на вход PORTD.2=1; //подтяжка MCUCR=0b00000010; //прерывание по спаду GICR=0b01000000; //врубаю INT0 #asm("sei") while(1){ delay_ms(200); } }
|
|
|
|
|
Nov 10 2011, 10:21
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(Палыч @ Nov 10 2011, 14:11)  3. Перед выходом из процедуры прерывания по INT сбросить флаг прерывания по INT. Не нужно - прерывания от INT будут запрещены, поэтому повторного вызова не произойдет. Цитата 4. При истечении времени Т (прерывания от таймера) настроить прерывания по INT для фиксации последующих нажатий кнопки; остановить таймер. А вот тут-то нужно сбросить прерывание от INT, поскольку при дребезге флаг прерывания уже установлен и только дожидается, чтобы прерывания разрешили...
|
|
|
|
|
Nov 10 2011, 16:03
|

Гуру
     
Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954

|
Цитата(rx3apf @ Nov 10 2011, 14:21)  Не нужно - прерывания от INT будут запрещены, поэтому повторного вызова не произойдет. При дребезге условие прерывания может возникнуть в интервал времени от входа в прерывание до запрещения этого прерывания, поэтому сбросить флаг всё-таки нужно. Цитата(rx3apf @ Nov 10 2011, 14:21)  А вот тут-то нужно сбросить прерывание от INT, поскольку при дребезге флаг прерывания уже установлен и только дожидается, чтобы прерывания разрешили... Естественно. При инициализации большинства устройств желательно сбрасывать флаги - мало ли что было на входах до этого... Цитата(aaarrr @ Nov 10 2011, 16:52)  Лучше фиксировать не первое попавшееся изменение, а стабильность уровня сигнала кнопки в течение промежутка времени, превышающего время дребезга. Не всегда это лучше. Пример: "ручная" синхронизация времени устройств, когда важно уловить "начало" нажатия на кнопку.
|
|
|
|
|
Nov 10 2011, 18:40
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Палыч @ Nov 10 2011, 20:26)  Пару-тройку лет назад мне попались внешне очень привлекательные китайские кнопки со временем дребезга более 120 мс. И мне попадались. Точнее, не мне - клиенту понравились. Дрянь редкостная, да ведь не объяснишь  Но это все же исключение. Цитата(Палыч @ Nov 10 2011, 20:26)  Бывает, что момент наезда механизма на концевик нужно зафиксировать поточнее... Ну, концевик - это все же несколько из другой оперы.
|
|
|
|
Сообщений в этой теме
failguru Внешнии прерывания atmega8L Nov 9 2011, 21:05 aaarrr Цитата(failguru @ Nov 10 2011, 01:05) оно... Nov 9 2011, 21:08 failguru ничесе дребезг) задержка 200милисек!!! Nov 9 2011, 21:10 aaarrr Цитата(failguru @ Nov 10 2011, 01:10) нич... Nov 9 2011, 21:14 failguru что делать? как же кнопки делают на INT0 INT1 Nov 9 2011, 21:20 x736C Таймаут по таймеру и маскирование прерываний INT0,... Nov 9 2011, 21:46 aaarrr Цитата(failguru @ Nov 10 2011, 01:20) что... Nov 9 2011, 21:48  ILYAUL Цитата(aaarrr @ Nov 10 2011, 01:48) Для к... Nov 10 2011, 05:15 failguru ЦитатаТаймаут по таймеру и маскирование прерываний... Nov 10 2011, 07:53 ILYAUL Цитата(failguru @ Nov 10 2011, 11:53) есл... Nov 10 2011, 09:22      ILYAUL Цитата(Палыч @ Nov 10 2011, 20:26) Бывает... Nov 10 2011, 18:01    rx3apf Цитата(Палыч @ Nov 10 2011, 20:03) При др... Nov 10 2011, 16:18  aaarrr Цитата(Палыч @ Nov 10 2011, 14:11) 2. Про... Nov 10 2011, 12:52 failguru да, в этом дело похоже, что дожидается. а как сбро... Nov 10 2011, 12:46 rx3apf Цитата(failguru @ Nov 10 2011, 16:46) да,... Nov 10 2011, 13:15 failguru Вот в таком варианте работает. Странно почему надо... Nov 10 2011, 13:31 rx3apf Цитата(failguru @ Nov 10 2011, 17:31) Два... Nov 10 2011, 13:39 rx3apf Цитата(failguru @ Nov 10 2011, 17:31) Вот... Nov 10 2011, 14:21 failguru уже два раза не пишет, все ок. теперь осталось тол... Nov 10 2011, 13:54 ILYAUL Цитата(failguru @ Nov 10 2011, 17:54) уже... Nov 10 2011, 14:13
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|