Проблема с прерыванием

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Проблема с прерыванием

Сообщение Master » 06 янв 2009, 16:15

Вот код. Я хочу после того как прерывание по INT1 выполница, отключить его, но походу если из прерывания не вышел, то отрубить его низя?
Код: Выделить всё
// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
// Place your code here
if (input_index==0) {     
                     OCR1B=((1023.0-PWMnach)/1023.0)*adc_data[input_index]+PWMnach;
                     //delta=adc_data[0]-adc_data[4];
                     //if (delta>=0) {OCR1B=((1023.0-PWMnach)/1023.0)*(adc_data[4]/*+delta*/)+PWMnach;}
                     //else {OCR1B=((1023.0-PWMnach)/1023.0)*(adc_data[4]/*+delta*/)+PWMnach;} 
                    }
   // External Interrupt(s) initialization
   // INT0: Off
   // INT1: Off
   MCUCR=0x00;  //Вот здесь я пытаюсь отключить прерывание по INT1 но т. к. на INT1 низкий уровень я не могу выйти из этого прерывания.
}
Аватара пользователя
Master
 
Сообщения: 4468
Зарегистрирован: 21 дек 2006, 19:56
Откуда: Украина, г.Одесса
прог. языки: Delphi и С

Re: Проблема с прерыванием

Сообщение avr123.nm.ru » 06 янв 2009, 16:50

Может флаг прерывания надо очистить, если он мог снова установиться пока выполнялаяь эта процедура.
"Прерывания в AVR" - http://avr123.nm.ru/03.htm

Выложи проект лучше. Если в симуляторе проверяешь, то возможно он глючит.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: Проблема с прерыванием

Сообщение nest » 06 янв 2009, 17:42

MCUCR=0x00; //Вот здесь я пытаюсь отключить прерывание по INT1 но т. к. на INT1 низкий уровень я не могу выйти из этого прерывания.

почему это не можешь ?
вообще вроде как прерывания выключаются через "General Interrupt Control Register"
ну там ещё обычно надо бы сбросить какие нить флаги , например в GIFG, проверить вложенные прерывания...

EDIT:
имел ввиду, разумеется, регистр GIFR
Последний раз редактировалось nest 06 янв 2009, 18:23, всего редактировалось 2 раз(а).
Аватара пользователя
nest
 
Сообщения: 977
Зарегистрирован: 21 янв 2005, 12:16
Откуда: Germany
прог. языки: asm

Re: Проблема с прерыванием

Сообщение avr123.nm.ru » 06 янв 2009, 17:58

nest писал(а):например в GIFG

Это что за фигня ??? На Телесистемах изобрели чтоль ?
А это что за фигня? На телесистемах научились так разговаривать? <Сергей>
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: Проблема с прерыванием

Сообщение nest » 06 янв 2009, 18:12

avr123.nm.ru, вы сегодня спали ещё хуже чем обычно ?

если кто где чего неверно сказал. вы поправьте открытым ясным текстом, доводами, там, или цитатами.
и старайтесь в сообщениях хоть от обсуждаемой темы не отклоняться, даже если у вас что то непоправимое случилось.
Аватара пользователя
nest
 
Сообщения: 977
Зарегистрирован: 21 янв 2005, 12:16
Откуда: Germany
прог. языки: asm

Re: Проблема с прерыванием

Сообщение Master » 06 янв 2009, 18:46

В Протеусе проверяю, 8-го приду на работу выложу проект целиком, просто не хотел грузить, а то там сильного много я всего наваял, уже самому тяжело осиливать что я там и где писал.
Аватара пользователя
Master
 
Сообщения: 4468
Зарегистрирован: 21 дек 2006, 19:56
Откуда: Украина, г.Одесса
прог. языки: Delphi и С

Re: Проблема с прерыванием

Сообщение avr123.nm.ru » 06 янв 2009, 19:19

МК какой ? PROTEUS любит глючить.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: Проблема с прерыванием

Сообщение Master » 06 янв 2009, 19:22

Мега 8

Добавлено спустя 47 секунд:
Раньше всегда все было верно, если глючило в протеусе, то и глючило в реале, поэтому я уверен что ошибка в коде.
Аватара пользователя
Master
 
Сообщения: 4468
Зарегистрирован: 21 дек 2006, 19:56
Откуда: Украина, г.Одесса
прог. языки: Delphi и С

Re: Проблема с прерыванием

Сообщение Master » 08 янв 2009, 11:01

Вот проект целиком.
Работать должно по идее так, потенциометром задаеца величина ШИМ двигателя, на INT1 заведено прерывание по низкому уровню от ШИМ, т. е. в момент когда ШИМ находица в нуле в этот момент измеряеца какое напряжение вырабатывает двигатель в этот момент и при необходимости увеличивает или уменьшает ШИМ.
Причем прерывания по INT1 я включаю периодически, а у меня получаеца что при попадании в прерывание я не могу из него выйти.
Вложения
PWM обратная связь03 копия02.zip
(165 КиБ) Скачиваний: 13
Аватара пользователя
Master
 
Сообщения: 4468
Зарегистрирован: 21 дек 2006, 19:56
Откуда: Украина, г.Одесса
прог. языки: Delphi и С

Re: Проблема с прерыванием

Сообщение avr123.nm.ru » 08 янв 2009, 13:28

Вместо MCUCR=0x00; (настройка от чего ИНТ срабатывает)
я воткнул
GICR = 0;
General Interrupt Control Register – GICR стр 49 даташит и подробнее стр 67 - он включает и выключает прерывания INT
Из прерывания вышел таки ...

Настройка внешних прерываний "External Interrupts" стр 66
По русски в даташите на http://avr123.nm.ru/02.htm

В курсе по AVR я прошу: Узнайте в даташите что делает каждая строка кода созданого мастером CVAVR или ICC

Добавлено спустя 26 минут 43 секунды:
ИМХО врядли имеет смысл мерить напругу так часто. Поэтому я бы отключал ШИМ например 100 раз в сек и делал спокойно АЦП - 10 подряд и усреднение последних 4 значений, а потом снова ШИМ включать.

Переключи на жругой вход АЦП чтоб i2c не занимать.

И на АЦП подавай через RC цепочку 1 ком и конденсатор наверно 100 нФ
Вложения
__PWM.rar
(59.17 КиБ) Скачиваний: 14
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: Проблема с прерыванием

Сообщение Master » 08 янв 2009, 13:48

спсб огромное, пошел разбираца.
Аватара пользователя
Master
 
Сообщения: 4468
Зарегистрирован: 21 дек 2006, 19:56
Откуда: Украина, г.Одесса
прог. языки: Delphi и С


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 10