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

 
 
> Xmega Прерывания
Pavel_Bor
сообщение Feb 28 2011, 14:03
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



Здравствуйте!

Захотелось подключить кнопочку к хмеге.
Я так понимаю нужно использовать следующий вектор прерываний. + уровни прерываний.
PORTE_INT0_vect 44 // External Interrupt 0
+ как-то надо обратится к биту кнопки.
Подскажите как это сделать, или где об этом можно почитать.

Сообщение отредактировал Pavel_Bor - Feb 28 2011, 14:04
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 20)
нечитатель
сообщение Feb 28 2011, 15:14
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 235
Регистрация: 20-11-10
Пользователь №: 61 032



Цитата(Pavel_Bor @ Feb 28 2011, 17:03) *
подключить кнопочку к ХХХ
Набрать в интернете запрос "+кнопки +ХХХ" вообще и/или "антидребезг" конкретно.
Ответ получится невежливый (очень!), зато подробный, сразу много вариантов и быстрее.
Цитата
или где об этом можно почитать.
Так и да.
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Mar 1 2011, 09:30
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



не могу найти про хмегу..
Go to the top of the page
 
+Quote Post
bob1
сообщение Mar 1 2011, 16:46
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 17-09-06
Пользователь №: 20 471



Цитата(Pavel_Bor @ Feb 28 2011, 19:03) *
Здравствуйте!

Захотелось подключить кнопочку к хмеге.
Я так понимаю нужно использовать следующий вектор прерываний. + уровни прерываний.
PORTE_INT0_vect 44 // External Interrupt 0
+ как-то надо обратится к биту кнопки.
Подскажите как это сделать, или где об этом можно почитать.

Про xмегу в инете инфы мало можно сказать нету. Вся почти на сайте производителя. Написана на Си для каждого модуля.
Кнопку лучше здесь подсоединить по другому. Кнопку к любому выводу. Вывод к каналу событий. В канале событий включить цифровой фильтр(он будет гасить дребезг) . Ну а дальше можно сделать обычное прерывание.......
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 1 2011, 18:44
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(bob1 @ Mar 1 2011, 18:46) *
Про xмегу в инете инфы мало можно сказать нету.


Руководство по 8-битным AVR-микроконтроллерам XMEGA A

ATxmega64A3, ATxmega128A3, ATxmega192A3, ATxmega256A3

и Application Notes (довольно неплохо сделали, лучше чем для MegaAvr)

Цитата
Вывод к каналу событий. В канале событий включить цифровой фильтр(он будет гасить дребезг) .


Антидребезг - несколько циклов?

Цитата
Ну а дальше можно сделать обычное прерывание.......


Лучше только его и делать...
Go to the top of the page
 
+Quote Post
bob1
сообщение Mar 1 2011, 19:40
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 17-09-06
Пользователь №: 20 471



Вот выдержка :
В каждом канале событий имеется цифровой фильтр. Если его активизировать, то событие через канал пройдет только в том случае, если выборки, выполненные на частоте системной синхронизации и в конфигурируемом количестве, имеют одинаковый логический уровень. Как правило, цифровая фильтрация применяется к событиям изменения состояния выводов.

Если уровень поменяется(дребезг) то событие не пройдет. Вот только если в течении нескольких циклов сигнал останется прежним, вот только тогда событие и произойдет!!!!
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Mar 2 2011, 08:00
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



Цитата(bob1 @ Mar 1 2011, 19:46) *
Про xмегу в инете инфы мало можно сказать нету. Вся почти на сайте производителя. Написана на Си для каждого модуля.
Кнопку лучше здесь подсоединить по другому. Кнопку к любому выводу. Вывод к каналу событий. В канале событий включить цифровой фильтр(он будет гасить дребезг) . Ну а дальше можно сделать обычное прерывание.......


Можно ли обойтись одной кнопкой без запуска захвата входа одним из модулей таймеров/счетчиков?
Например здесь:
AVR1001
-->4.1 Захват входа

Может у Вас есть какой-нибудь пример?

Сообщение отредактировал Pavel_Bor - Mar 2 2011, 13:23
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 2 2011, 13:33
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(bob1 @ Mar 1 2011, 21:40) *
Вот выдержка :
В каждом канале событий имеется цифровой фильтр. Если его активизировать, то событие через канал пройдет только в том случае, если выборки, выполненные на частоте системной синхронизации и в конфигурируемом количестве, имеют одинаковый логический уровень. Как правило, цифровая фильтрация применяется к событиям изменения состояния выводов.

Если уровень поменяется(дребезг) то событие не пройдет. Вот только если в течении нескольких циклов сигнал останется прежним, вот только тогда событие и произойдет!!!!


Время дребезга - это миллисекунды, а не несколько циклов (на 32 МГц - меньше 1uc - разница на 3 порядка).
Go to the top of the page
 
+Quote Post
bob1
сообщение Mar 3 2011, 05:05
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 17-09-06
Пользователь №: 20 471



Цитата(Pavel_Bor @ Mar 2 2011, 13:00) *
Можно ли обойтись одной кнопкой без запуска захвата входа одним из модулей таймеров/счетчиков?
Например здесь:
AVR1001
-->4.1 Захват входа

Может у Вас есть какой-нибудь пример?

Какую задачу хотите решить??? По нажатию кнопки , что будет срабатывать и на какой частоте работает ядро??

Цитата(_Артём_ @ Mar 2 2011, 18:33) *
Время дребезга - это миллисекунды, а не несколько циклов (на 32 МГц - меньше 1uc - разница на 3 порядка).

На 32 Мгц скорее всего фильтр работать не будет. Если в "дребезге" будет импульс больше 8/32=0,25мкс , то фильтр его пропустит!!!!
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Mar 3 2011, 07:56
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



Цитата(bob1 @ Mar 3 2011, 08:05) *
Какую задачу хотите решить??? По нажатию кнопки , что будет срабатывать и на какой частоте работает ядро??


Для примера: по нажатию кнопки переключение светодиодов.
А конкретно для задачи - написать какое-то слово на ЖК.
Частота работы ядра 4.608 Мгц

Сообщение отредактировал Pavel_Bor - Mar 3 2011, 07:56
Go to the top of the page
 
+Quote Post
bob1
сообщение Mar 3 2011, 09:09
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 17-09-06
Пользователь №: 20 471



Цитата(Pavel_Bor @ Mar 3 2011, 12:56) *
А конкретно для задачи - написать какое-то слово на ЖК.
Частота работы ядра 4.608 Мгц


Кнопка к 2 выводу порта Е.

ISR(PORTE_INT0_vect){
while((PORTE.IN&PIN2_bm)!=PIN2_bm){};//ждем отпускания кнопки
__delay_cycles(F_CPU/10); //время на дребезг
.... здесь выводите на экран или устанавливаете флаг срабатывания кнопки.
};
или
ISR(PORTE_INT0_vect){
PORTE.INTCTRL =0; //запрещает прерывания
.... здесь выводите на экран или устанавливаете флаг срабатывания кнопки.
};

void main (void)
{
PORTE.INTCTRL =(uint8_t)PORT_INT0LVL_LO_gc;
sei();
PORTE.PIN2CTRL=PORT_SRLEN_bm|PORT_ISC_FALLING_gc|PORT_OPC_PULLUP_gc;
while(1);
};

Сообщение отредактировал bob1 - Mar 3 2011, 09:10
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Mar 3 2011, 09:18
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



Спасибо.
После того как кнопка отпущена происходит задержка, может надо еще раз проверить?
Код по прерываниям, без использования захвата событий.
Флаг и разрешение прерывания по порту тоже надо устанавливать?
Go to the top of the page
 
+Quote Post
KKV2003
сообщение Mar 3 2011, 10:29
Сообщение #13


Участник
*

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



Э... А конденсаторы параллельно кнопочке уже отменили? crying.gif

Я бы поставил последовательно с кнопкой резистор Ом на 100-1000 для ограничения тока... А подтяжка чтобы вытягивала нормальное напряжение обычным образом... То есть цепочка такая - вход оттягивается вверх подтяжкой ( например встроенной ), между входом и землей - кондер ( например на 0,1 мкФ ) и параллельно кондеру кнопка с последовательным резистором. Номиналя я бы подобрал так, чтобы время заряда конденсатора от подтяжки значительно превышало время дребезга, а время разряда через кнопку было меньше длительности дребезга, но больше времени замкнутого состояния кнопки при дребезге. То есть если считать что кнопка дребезжит 1 мС импульсами по 1-10 мкС, то время разряда кондера я бы выбрал 50-100 мкС, и время заряда через подтяжку - порядка 10-100 мС. От таких сигналов даже счетчик нажатия адекватно обрабатывает нажатие кнопки...

Ну или развлекаться с программной обработкой... laughing.gif
Go to the top of the page
 
+Quote Post
bob1
сообщение Mar 3 2011, 10:31
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 17-09-06
Пользователь №: 20 471



Цитата(Pavel_Bor @ Mar 3 2011, 14:18) *
Спасибо.
После того как кнопка отпущена происходит задержка, может надо еще раз проверить?
Код по прерываниям, без использования захвата событий.
Флаг и разрешение прерывания по порту тоже надо устанавливать?


Это всего лишь один из вариантов. Да код по прерыванию порта.
вот эти строки разрешают прерывание.
PORTE.INTCTRL =PORT_INT0LVL_LO_gc;
sei();

А флаг в прерывании скорее всего надо будет сбросить перед выходом из него.
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Mar 3 2011, 10:49
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



а как изменяется код если с событием?

Сообщение отредактировал Pavel_Bor - Mar 4 2011, 08:00
Go to the top of the page
 
+Quote Post
bob1
сообщение Mar 3 2011, 17:49
Сообщение #16


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 17-09-06
Пользователь №: 20 471



Цитата(Pavel_Bor @ Mar 3 2011, 15:49) *
а как изменяется код если с событием?


Принцип следующий. Вход канала событий подключается к выводу на котором кнопка. Выход канала событий к счетчику. Период счетчика =1. По переполнению счетчика делаем прерывание........
В канале событий задаем значение цифрового фильтра от 1...8. Часть кода должна быть в AVR1001.
Данный метод будет работать при более низких тактовых частотах.
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Mar 4 2011, 08:37
Сообщение #17


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660




У меня cod vision ругается на строку ISR(PORTE_INT0_vect)
- declaration syntax error

Сообщение отредактировал Pavel_Bor - Mar 4 2011, 08:41
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Mar 14 2011, 12:31
Сообщение #18


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



Код
//Допустим вешаю я две кнопки на порт Е 6 и 7

    PORTE.PIN6CTRL=PORT_OPC_PULLUP_gc | PORT_ISC_BOTHEDGES_gc;
    PORTE.PIN7CTRL=PORT_OPC_PULLUP_gc | PORT_ISC_BOTHEDGES_gc;

//ставлю уровень прерывания для этого порта LOW

    PORTE.INTCTRL=PORTE.INTCTRL & ~PORT_INT0LVL_gm;

#asm("sei") //Разрешаю прерывания

//Ну и собственно само прерывание

    interrupt [PORTE_INT0_vect] void porte_int0_isr(void)
    {
        while((PORTE.IN&PIN6_bm)!=PIN6_bm){};  // ждем отпускания кнопки
           for(i=0;i<20;i++);   //время на дребезг
                PORTD.OUT=0xff;
    }


Так вот не попадаю я в тело прерывания..
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 14 2011, 16:46
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Pavel_Bor @ Mar 14 2011, 14:31) *
Код
//Допустим вешаю я две кнопки на порт Е 6 и 7

    PORTE.PIN6CTRL=PORT_OPC_PULLUP_gc | PORT_ISC_BOTHEDGES_gc;
    PORTE.PIN7CTRL=PORT_OPC_PULLUP_gc | PORT_ISC_BOTHEDGES_gc;

//ставлю уровень прерывания для этого порта LOW

    PORTE.INTCTRL=PORTE.INTCTRL & ~PORT_INT0LVL_gm;

#asm("sei") //Разрешаю прерывания

//Ну и собственно само прерывание

    interrupt [PORTE_INT0_vect] void porte_int0_isr(void)
    {
        while((PORTE.IN&PIN6_bm)!=PIN6_bm){};  // ждем отпускания кнопки
           for(i=0;i<20;i++);   //время на дребезг
                PORTD.OUT=0xff;
    }


Так вот не попадаю я в тело прерывания..



Может не разрешён соотв. уровень прерываний?
Код
              PMIC.CTRL |= PMIC_LOLVLEN_bm;

Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Mar 17 2011, 14:15
Сообщение #20


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



Цитата(_Артём_ @ Mar 14 2011, 19:46) *
Может не разрешён соотв. уровень прерываний?
Код
              PMIC.CTRL |= PMIC_LOLVLEN_bm;



Cтоит, он вот здесь прописан
Код
void main(void)
{
    #pragma optsize-
    #asm("cli")        

    PMIC.CTRL|=PMIC_LOLVLEN_bm;  

    // Restore optimization for size if needed
    #pragma optsize_default
...
}


Сообщение отредактировал Pavel_Bor - Mar 17 2011, 14:15
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 17 2011, 16:16
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Pavel_Bor @ Mar 17 2011, 16:15) *
Cтоит, он вот здесь прописан
Код
void main(void)
{
    #pragma optsize-
    #asm("cli")        

    PMIC.CTRL|=PMIC_LOLVLEN_bm;  

    // Restore optimization for size if needed
    #pragma optsize_default
...
}


Наверно не проинициализирован регистр INT0MASK (если нужно прерывание 0).
Цитата
13.14.11. INT0MASK - регистр маски прерывания 0

Биты 7:0 - INT0MSK[7:0]: регистр маски прерывания 0

С помощью данных бит можно указать, какие линии порта используются в качестве прерывания 0 порта ввода-вывода. Если бит INT0MASKn сделать равным единице, то линия n будет использоваться, как источник прерывания 0. Условия генерации прерываний для каждой линии порта дополнительно задаются с помощью регистров PINnCTRL.


http://www.gaw.ru/html.cgi/txt/doc/micros/...ega_a/13_14.htm
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 15:07
Рейтинг@Mail.ru


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