roboforum.ru

Технический форум по робототехнике.
Текущее время: 27 ноя 2024, 06:34

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Проблема с прерыванием
СообщениеДобавлено: 06 янв 2009, 16:15 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Вот код. Я хочу после того как прерывание по 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 низкий уровень я не могу выйти из этого прерывания.
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с прерыванием
СообщениеДобавлено: 06 янв 2009, 16:50 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Может флаг прерывания надо очистить, если он мог снова установиться пока выполнялаяь эта процедура.
"Прерывания в AVR" - http://avr123.nm.ru/03.htm

Выложи проект лучше. Если в симуляторе проверяешь, то возможно он глючит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с прерыванием
СообщениеДобавлено: 06 янв 2009, 17:42 
Не в сети
Аватара пользователя

Зарегистрирован: 21 янв 2005, 12:16
Сообщения: 977
Откуда: Germany
прог. языки: asm
Цитата:
MCUCR=0x00; //Вот здесь я пытаюсь отключить прерывание по INT1 но т. к. на INT1 низкий уровень я не могу выйти из этого прерывания.

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

EDIT:
имел ввиду, разумеется, регистр GIFR


Последний раз редактировалось nest 06 янв 2009, 18:23, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с прерыванием
СообщениеДобавлено: 06 янв 2009, 17:58 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
nest писал(а):
например в GIFG

Это что за фигня ??? На Телесистемах изобрели чтоль ?
А это что за фигня? На телесистемах научились так разговаривать? <Сергей>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с прерыванием
СообщениеДобавлено: 06 янв 2009, 18:12 
Не в сети
Аватара пользователя

Зарегистрирован: 21 янв 2005, 12:16
Сообщения: 977
Откуда: Germany
прог. языки: asm
avr123.nm.ru, вы сегодня спали ещё хуже чем обычно ?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с прерыванием
СообщениеДобавлено: 06 янв 2009, 18:46 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с прерыванием
СообщениеДобавлено: 06 янв 2009, 19:19 
Не в сети
отсылающий читать курс
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с прерыванием
СообщениеДобавлено: 06 янв 2009, 19:22 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Мега 8

Добавлено спустя 47 секунд:
Раньше всегда все было верно, если глючило в протеусе, то и глючило в реале, поэтому я уверен что ошибка в коде.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с прерыванием
СообщениеДобавлено: 08 янв 2009, 11:01 
Не в сети
Аватара пользователя

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


Вложения:
PWM обратная связь03 копия02.zip [165 КиБ]
Скачиваний: 13
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с прерыванием
СообщениеДобавлено: 08 янв 2009, 13:28 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Вместо 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
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с прерыванием
СообщениеДобавлено: 08 янв 2009, 13:48 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC + 4 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO