реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Внешнии прерывания atmega8L, трабл с перрыванием
rx3apf
сообщение Nov 10 2011, 13:15
Сообщение #16


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(failguru @ Nov 10 2011, 16:46) *
да, в этом дело похоже, что дожидается. а как сбросить?

Записью "1" в соответствующий бит GIFR. Чтение даташитов - за отдельную плату wink.gif
Go to the top of the page
 
+Quote Post
failguru
сообщение Nov 10 2011, 13:31
Сообщение #17


Участник
*

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



Вот в таком варианте работает. Странно почему надо устанавливать флаг в GIFR. Типо он думает что еще обрабатывается прошлое прерывание)
Остался один вопрос. Когда убираешь землю, мол фронт возрастает, а он все равно прерывание вызывает. Тоже дребезг??? И как исправить.

Код
interrupt [EXT_INT0] int_0(void){
    GICR=0x00;
    wrlcd(1,0,(int)'G');
    TCNT0=0;
    TCCR0=0b00000101;                  //включаю счетчик с делителем 1024 (1/(8мГц/1024)*256=0.033 секунды переполнение)
}
interrupt [TIM0_OVF] void tin(void) {
    i++;
    if(i==30){                        //проходит примерно секунда!!!!!!
        GIFR=0b01000000;               //устанавливаю флаг
        GICR=0b01000000;               //включаю опять внешнее прерывание
        TCCR0=0x00;                    //торможу счетчик
        i=0;
    }
}
void main(){
    delay_ms(100);
    initlcd();
        wrlcd(1,0,(int)'E');
        DDRD.2=0;               //порт с INT0 на вход
        PORTD.2=1;              //подтяжка
        TIMSK=0b00000001;
        MCUCR=0b00000010;       //прерывание по спаду
        GICR=0b01000000;        //врубаю INT0
        #asm("sei")
        while(1){
            delay_ms(500);
        }
}


Сообщение отредактировал failguru - Nov 10 2011, 13:44
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Nov 10 2011, 13:39
Сообщение #18


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(failguru @ Nov 10 2011, 17:31) *
Два раза пишет все равно с таймером!!!!!!!!!!!!!!!

Прочитайте написанное выше ВНИМАТЕЛЬНО.
Go to the top of the page
 
+Quote Post
failguru
сообщение Nov 10 2011, 13:54
Сообщение #19


Участник
*

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



уже два раза не пишет, все ок. теперь осталось только когда отжимаю кнопку срабатывает, а не должен

Сообщение отредактировал failguru - Nov 10 2011, 13:54
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Nov 10 2011, 14:13
Сообщение #20


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(failguru @ Nov 10 2011, 17:54) *
уже два раза не пишет, все ок. теперь осталось только когда отжимаю кнопку срабатывает, а не должен


Как при нажатии так и отпускании кнопки - есть дребезг. Остальное Вы уже знаете


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Nov 10 2011, 14:21
Сообщение #21


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(failguru @ Nov 10 2011, 17:31) *
Вот в таком варианте работает. Странно почему надо устанавливать флаг в GIFR. Типо он думает что еще обрабатывается прошлое прерывание)

Если что-то кажется странным - прочитайте даташит.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Nov 10 2011, 16:03
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 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) *
Лучше фиксировать не первое попавшееся изменение, а стабильность уровня сигнала кнопки в течение промежутка времени, превышающего время дребезга.

Не всегда это лучше. Пример: "ручная" синхронизация времени устройств, когда важно уловить "начало" нажатия на кнопку.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 10 2011, 16:08
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Палыч @ Nov 10 2011, 20:03) *
Не всегда это лучше. Пример: "ручная" синхронизация времени устройств, когда важно уловить "начало" нажатия на кнопку.

На кнопку нажимает спринтер Болт? Или у нее дребезг 0.5с?
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Nov 10 2011, 16:18
Сообщение #24


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(Палыч @ Nov 10 2011, 20:03) *
При дребезге условие прерывания может возникнуть в интервал времени от входа в прерывание до запрещения этого прерывания, поэтому сбросить флаг всё-таки нужно.

Оно же не может произойти рекурсивно ? Мы вошли в обработчик прерывания, ну получили еще одно (флаг выставился), но запрещаем-то перед выходом из обработчика. А раз прерывание запрещено - то повторного вызова обработчика не будет.


Цитата(aaarrr @ Nov 10 2011, 20:08) *
На кнопку нажимает спринтер Болт? Или у нее дребезг 0.5с?

Кнопки разные бывают, частота опроса тоже может быть весьма разной. Вполне можно представить ситуацию, когда и десяток mS критичен.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Nov 10 2011, 16:26
Сообщение #25


Гуру
******

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



Цитата(aaarrr @ Nov 10 2011, 20:08) *
Или у нее дребезг 0.5с?
Пару-тройку лет назад мне попались внешне очень привлекательные китайские кнопки со временем дребезга более 120 мс.

Цитата(aaarrr @ Nov 10 2011, 20:08) *
На кнопку нажимает спринтер Болт?
Бывает, что момент наезда механизма на концевик нужно зафиксировать поточнее...
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Nov 10 2011, 18:01
Сообщение #26


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(Палыч @ Nov 10 2011, 20:26) *
Бывает, что момент наезда механизма на концевик нужно зафиксировать поточнее...

Тогда уж АЦП - время принятия решения ~ 27ms (и достаточно надёжно - сбоев замечено не было) , но ведь можно и меньше или больше .


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 10 2011, 18:40
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Палыч @ Nov 10 2011, 20:26) *
Пару-тройку лет назад мне попались внешне очень привлекательные китайские кнопки со временем дребезга более 120 мс.

И мне попадались. Точнее, не мне - клиенту понравились. Дрянь редкостная, да ведь не объяснишь sad.gif Но это все же исключение.

Цитата(Палыч @ Nov 10 2011, 20:26) *
Бывает, что момент наезда механизма на концевик нужно зафиксировать поточнее...

Ну, концевик - это все же несколько из другой оперы.
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th August 2025 - 23:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.01471 секунд с 7
ELECTRONIX ©2004-2016