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

 
 
> Внешнии прерывания atmega8L, трабл с перрыванием
failguru
сообщение Nov 9 2011, 21:05
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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);
        }
}

ХЭЛП
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
failguru
сообщение Nov 10 2011, 09:55
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 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);
        }
}
Go to the top of the page
 
+Quote Post
Палыч
сообщение Nov 10 2011, 10:11
Сообщение #3


Гуру
******

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



Дребезг контактов можно подавить двумя способами;
1. Аппаратный - поставить RS-триггер. Вероятно, не хотите ставить...
2. Программный. В этом случае необходимо после первого изменения состояния кнопки не реагировать на её изменение в течении некоторого времени, большего чем время дребезга (обычно, для этого задействуют таймер).

В Вашем случае:
1. При входе в процедуру прерывания нужно запретить прерывания от INT.
2. Запустить таймер на время Т, большее чем время дребезга.
3. Перед выходом из процедуры прерывания по INT сбросить флаг прерывания по INT.
4. При истечении времени Т (прерывания от таймера) настроить прерывания по INT для фиксации последующих нажатий кнопки; остановить таймер.

P.S. Описанное выше Вам рекомендавал x736C в сообщении #6
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 10 2011, 12:52
Сообщение #4


Гуру
******

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



Цитата(Палыч @ Nov 10 2011, 14:11) *
2. Программный. В этом случае необходимо после первого изменения состояния кнопки не реагировать на её изменение в течении некоторого времени, большего чем время дребезга (обычно, для этого задействуют таймер).

Лучше фиксировать не первое попавшееся изменение, а стабильность уровня сигнала кнопки в течение промежутка времени, превышающего время дребезга.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
|- - rx3apf   Цитата(Палыч @ Nov 10 2011, 14:11) 3. Пер...   Nov 10 2011, 10:21
||- - Палыч   Цитата(rx3apf @ Nov 10 2011, 14:21) Не ну...   Nov 10 2011, 16:03
||- - aaarrr   Цитата(Палыч @ Nov 10 2011, 20:03) Не все...   Nov 10 2011, 16:08
|||- - Палыч   Цитата(aaarrr @ Nov 10 2011, 20:08) Или у...   Nov 10 2011, 16:26
|||- - ILYAUL   Цитата(Палыч @ Nov 10 2011, 20:26) Бывает...   Nov 10 2011, 18:01
|||- - aaarrr   Цитата(Палыч @ Nov 10 2011, 20:26) Пару-т...   Nov 10 2011, 18:40
||- - rx3apf   Цитата(Палыч @ Nov 10 2011, 20:03) При др...   Nov 10 2011, 16:18
- - 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


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

 


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


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