29.04.2013, 20:53
|
|
Временная регистрация
Регистрация: 09.11.2009
Сообщений: 43
Сказал спасибо: 44
Сказали Спасибо 5 раз(а) в 4 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Сообщение от s64
|
" ; " - нужно убрать, по моему.
|
Точно. Но проблема не в этом ;(
|
|
|
|
30.04.2013, 00:04
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Сообщение от Митя
|
Точно. Но проблема не в этом ;(
|
А глобально разрешить прерывания не пробовали? Что-то я не вижу __interrupt_enable по тексту (как оно там, в вашем компиляторе?). Или оно подразумевается как нечто само собой разумеющееся?
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
30.04.2013, 01:14
|
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Сообщение от ut1wpr
|
Что-то я не вижу __interrupt_enable по тексту (как оно там, в вашем компиляторе?). Или оно подразумевается как нечто само собой разумеющееся?
|
Невнимательно смотрите:
Код:
|
int main (void)
{
__enable_interrupt(); |
|
|
|
|
30.04.2013, 01:18
|
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Сообщение от Митя
|
Джентльмены!
Помогите разобраться с прерываниями
понимаю что ошибка в ДНК но где именно ![Бьюсь об стену](images/smilies/icon_obstenu.gif)
процедура прерывания не вызывается
без прерываний АЦП работает
|
Всё вроде у вас правильно. Как проверяете программу?
Может не успеваете отследить прерывания (оно должно возникать приблизительно раз в 8*13=104 такта)?
Или в симуляторе не работает?
Последний раз редактировалось _Артём_; 30.04.2013 в 01:48.
|
|
|
Сказали "Спасибо" _Артём_
|
|
|
30.04.2013, 01:24
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Сообщение от _Артём_
|
Невнимательно смотрите:
Код:
|
int main (void)
{
__enable_interrupt(); |
|
Да, невнимателен, извините.
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
30.04.2013, 06:47
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,969
Сказал спасибо: 2,553
Сказали Спасибо 11,850 раз(а) в 5,938 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Митя, возникает два вопроса:
1. Как, точнее, чем определяете обработку прерывания?
2. На чем основана уверенность в работе АЦП?
Раз уж ступор - логичней суп отделить от мух и разобраться с ними по отдельности.
Скажем, преобразования одиночные (в цикле) с прерываниями, а уж потом загонять АЦП в непрерывный режим.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
30.04.2013, 10:16
|
|
Временная регистрация
Регистрация: 09.11.2009
Сообщений: 43
Сказал спасибо: 44
Сказали Спасибо 5 раз(а) в 4 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Спасибо за помощ уважаемые
akegor ›› 1 тестирую и в симе и на железе результат один, все что внутрифункции " __interrupt void ADCint(void)" не выполняется (в симе на этоот брякпоинт не заходит)
2 без прерываний работает возвращает то что надо
Код:
|
#include ‹ioavr.h›
#include ‹intrinsics.h›
int main (void)
PORTB = 0xFF; /* Give PORTB and the User LEDs an initial startvalue */
DDRB = 0xFF; /* Set PORTB as output */
/*** Настройка АЦП ***/
ADCSRA |= (1 ‹‹ ADEN) // Включение АЦП
|(1 ‹‹ ADPS1)|(1 ‹‹ ADPS0); // предделитель преобразователя на 8
ADMUX |= (0 ‹‹ REFS1)|(0 ‹‹ REFS0) // внешний ИОН
|(1 ‹‹ MUX0)|(0 ‹‹ MUX1)|(0 ‹‹ MUX2)|(0 ‹‹ MUX3); // вход PC0
while(1)
{
ADCSRA |= (1 ‹‹ ADSC); // Начинаем преобразование
while ((ADCSRA&(1 ‹‹ ADIF))== 0); // Ждем флага окончания преобразования
int2com(ADCL|ADCH ‹‹ 8); // Считываем ADC и в передаем через COM
PORTB ^= 0xFF;
__delay_cycles(500000);
}
} |
|
|
|
|
30.04.2013, 11:18
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
А где ADCIE?
Для возникновения прерывания, вам надо разрешить прерывание от самого устройства и установить глобальный флаг разрешения прерывания.
|
|
|
|
30.04.2013, 11:49
|
|
Временная регистрация
Регистрация: 09.11.2009
Сообщений: 43
Сказал спасибо: 44
Сказали Спасибо 5 раз(а) в 4 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
SasaVitebsk››
Вот он
Код:
|
__enable_interrupt();
ADCSRA |= (1 ‹‹ ADEN) // Включение АЦП
|(1 ‹‹ ADPS1)|(1 ‹‹ ADPS0)// предделитель преобразователя на 8
|(1 ‹‹ ADATE )|(1 ‹‹ ADIE ); |
и судя по симу выставляется
|
|
|
|
30.04.2013, 12:57
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Сообщение от Митя
|
SasaVitebsk››Вот он
|
Ну значит и прерывание возникает. Чудес то не бывает.
Я не заметил подключённого #include "iom2560.h".
Возможно не те адреса. Остальное всё правильно - будет работать
|
|
|
Сказали "Спасибо" SasaVitebsk
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 18:15.
|
|