Форум РадиоКот • Просмотр темы - Вопрос к знатокам, почему не работают 2 прерывания совмесно
Сообщения без ответов | Активные темы
Страница 1 из 3
[ Сообщений: 42 ]
, ,
Автор
Сообщение
fulky
Заголовок сообщения: Вопрос к знатокам, почему не работают 2 прерывания совмесно
Добавлено: Чт сен 21, 2017 14:16:10
Зарегистрирован: Ср сен 13, 2017 05:53:24Сообщений: 31
Рейтинг сообщения: 0
Хочу запустить в работу одновременно таймер0 и таймер1 на аттини85 и с них обрабатывать прерывания. Они настроены по разному с разными предделителями. Почему прерывания по вектору TIMER1_COMPA_vect полностью нейтрализует TIMER0_COMPA_vect?
и как сделать их одновременную работу.
Счетчики TCNT продолжают считать, пока выполняется любое из прерываний ?
Код:
#define F_CPU 1000000 #include <util/delay.h> #include <avr/io.h> #include <avr/interrupt.h> unsigned char i=0; //---------- void segchar (unsigned char seg) { switch (seg) { case 1: PORTB = 0b00000010; break; case 2: PORTB = 0b00000110; break; case 3: PORTB = 0b00001110; break; case 4: PORTB = 0b00011110; break; } } //---------- void timer_ini (void){ TCCR0A |= (1<<WGM01); //Устанавливаем режим СТС сброс по совпадению TCCR0B |= (1<<CS02)|(0<<CS01)|(1<<CS00); //Делитель 1024 TIMSK |=(1<<OCIE0A); //бит разрешения прерываний OCR0A = 0b11111111; //до чего считать } //---------- //обработка прерывания таймера0 ISR (TIMER0_COMPA_vect) { if (i>=5){i=1;} segchar(i); i++; } void timer1_ini (void){ TCCR1 |= (1 << CTC1) //режим CTC |(0<<COM1A1)|(0<<COM1A0) //отключаем OC1A |(1 << CS10)|(1 << CS11)|(1 << CS12)|(0 << CS13); //Делитель 8192 TCNT1 = 0x00; //сброс счетчика OCR1A = 0xFA; //регистр сравнения TIMSK =(1<<OCIE1A); //включаем прерывания по переполнению } //обработка прерывания таймера1 ISR(TIMER1_COMPA_vect){ PORTB = 0b00000000; } //---------- int main(void) { sei(); timer_ini(); timer1_ini(); DDRB = 0xfe; PORTB = 0b00000000; //---------- while(1){ } }
Вернуться наверх
Реклама
ARV
Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
Добавлено: Чт сен 21, 2017 14:19:14
Ум, честь и совесть. И скромность.
Карма: 98
Рейтинг сообщений: 2119
Зарегистрирован: Чт дек 28, 2006 08:19:56Сообщений: 18406Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Счетчики считают, пока включен таймер. В нормально написанных программах никакой блокировки нет и быть не может. как вы вычислили, что прерывания блокируются? у вас переменная i не объявлена volatile - не факт, что у вас вообще работоспособный код
_________________если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...Мой уютный бложик ... заходите!
Вернуться наверх
Реклама
fulky
Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
Добавлено: Чт сен 21, 2017 14:28:14
Зарегистрирован: Ср сен 13, 2017 05:53:24Сообщений: 31
Рейтинг сообщения: 0
В протеусе добавьте аттини 85 и закоментите timer1_ini() в коде; выхода начнут зажигаться. по моей задумке таймером1 должны сброситься выходы
Вернуться наверх
ARV
Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
Добавлено: Чт сен 21, 2017 14:41:40
Ум, честь и совесть. И скромность.
Карма: 98
Рейтинг сообщений: 2119
Зарегистрирован: Чт дек 28, 2006 08:19:56Сообщений: 18406Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
fulky писал(а):
В протеусе добавьте аттини 85 и закоментите timer1_ini() в коде;
щаззз
что еще сделать?
_________________если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...Мой уютный бложик ... заходите!
Вернуться наверх
fulky
Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
Добавлено: Чт сен 21, 2017 15:11:47
Зарегистрирован: Ср сен 13, 2017 05:53:24Сообщений: 31
Рейтинг сообщения: 0
Увидеть своими глазами воочию
Вернуться наверх
Реклама
Z_h_e
Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
Добавлено: Чт сен 21, 2017 16:28:54
Собутыльник Кота
Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04Сообщений: 2708Откуда: г. Чайковский
Рейтинг сообщения: 3
Медали: 1
fulky писал(а):
|(1 << CS10)|(1 << CS11)|(1 << CS12)|(0 << CS13); //Делитель 8192
Это делитель на 64.
Цитата:
TIMSK =(1<<OCIE1A); //включаем прерывания по переполнению
и вЫключаем прерываний от таймера0.
--------
переменную i как volatile не стоит объявлять, но стоит ее объявить внутри обработчика прерывания как static.
Добавлено after 3 minutes 3 seconds: Re: Вопрос к знатокам, почему не работают 2 прерывания совмесно Пошаговая отладка решает много проблем, что же ей мало так кто пользуется.
_________________Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Вернуться наверх
Реклама
Мурик
Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
Добавлено: Чт сен 21, 2017 16:38:37
Друг Кота
Карма: 1
Рейтинг сообщений: 179
Зарегистрирован: Пн окт 11, 2010 19:00:08Сообщений: 3379
Рейтинг сообщения: 0
Z_h_e писал(а):
Пошаговая отладка решает много проблем, что же ей мало так кто пользуется.
Наверное потому что ATtiny85 не поддерживает аппаратную отладку с пошаговым режимом.
Вернуться наверх
Z_h_e
Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
Добавлено: Чт сен 21, 2017 16:42:10
Собутыльник Кота
Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04Сообщений: 2708Откуда: г. Чайковский
Рейтинг сообщения: 3
Медали: 1
Пошаговая не только в железе бывает.
_________________Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Вернуться наверх
fulky
Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
Добавлено: Чт сен 21, 2017 17:25:09
Зарегистрирован: Ср сен 13, 2017 05:53:24Сообщений: 31
Рейтинг сообщения: 0
fulky писал(а):
|(1 << CS10)|(1 << CS11)|(1 << CS12)|(0 << CS13); //Делитель 8192
Это делитель на 64.
Цитата:
TIMSK =(1<<OCIE1A); //включаем прерывания по переполнению
и вЫключаем прерываний от таймера0.
--------
переменную i как volatile не стоит объявлять, но стоит ее объявить внутри обработчика прерывания как static.
Добавлено after 3 minutes 3 seconds: Re: Вопрос к знатокам, почему не работают 2 прерывания совмесно Пошаговая отладка решает много проблем, что же ей мало так кто пользуется.
Код:
TCCR1 |= (1 << CTC1) //режим CTC |(0<<COM1A1)|(0<<COM1A0) //отключаем OC1A |(1 << CS13)|(0 << CS12)|(1 << CS11)|(0 << CS10); //Делитель 512 TCNT1 = 0x00; //сброс счетчика OCR1A = 0xFF; //регистр сравнения TIMSK =(1<<TOIE1); //включаем прерывания по переполнению
решил переделать на прерывание по переполнению, все тоже самое; получается все прерывания таймера1 отключают прерывания по таймеру0????
Последний раз редактировалось fulky Чт сен 21, 2017 17:26:49, всего редактировалось 1 раз.
Вернуться наверх
Реклама
Z_h_e
Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
Добавлено: Чт сен 21, 2017 17:26:38
Собутыльник Кота
Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04Сообщений: 2708Откуда: г. Чайковский
Рейтинг сообщения: 1
Медали: 1
Нет. Подумайте сами.
_________________Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Вернуться наверх
fulky
Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
Добавлено: Чт сен 21, 2017 18:01:55
Зарегистрирован: Ср сен 13, 2017 05:53:24Сообщений: 31
Рейтинг сообщения: 0
Вернуться наверх
COKPOWEHEU
Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
Добавлено: Пт сен 22, 2017 10:19:00
Говорящий с текстолитом
Карма: 8
Рейтинг сообщений: 212
Зарегистрирован: Чт июн 10, 2010 20:11:19Сообщений: 1525
Рейтинг сообщения: 0
я даже больше скажу: "|="
Вернуться наверх
ARV
Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
Добавлено: Пт сен 22, 2017 10:25:22
Ум, честь и совесть. И скромность.
Карма: 98
Рейтинг сообщений: 2119
Зарегистрирован: Чт дек 28, 2006 08:19:56Сообщений: 18406Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
COKPOWEHEU писал(а):
я даже больше скажу
ух, рубанул!!!
_________________если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...Мой уютный бложик ... заходите!
Вернуться наверх
Z_h_e
Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
Добавлено: Пт сен 22, 2017 16:25:32
Собутыльник Кота
Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04Сообщений: 2708Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
"|"
Самое главное чтобы это был не смайлик
.
_________________Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Вернуться наверх
fulky
Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
Добавлено: Сб сен 23, 2017 06:51:57
Зарегистрирован: Ср сен 13, 2017 05:53:24Сообщений: 31
Рейтинг сообщения: 0
То чувство когда целый день делаешь и все получается, а потом под вечер из-за такого косяка часа 2 пялишься в монитор, пробуешь и ничего не выходит
Вернуться наверх
Z_h_e
Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
Добавлено: Сб сен 23, 2017 07:03:00
Собутыльник Кота
Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04Сообщений: 2708Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Z_h_e писал(а):
Пошаговая отладка решает много проблем,
_________________Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Вернуться наверх
knyaz*
Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
Добавлено: Пн сен 25, 2017 22:42:24
Грызет канифоль
Зарегистрирован: Пн фев 11, 2008 20:32:45Сообщений: 255Откуда: Краснодарский край
Рейтинг сообщения: 0
А такое вообще возможно, что бы два прерывания работали одновременно?
Вернуться наверх
Z_h_e
Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
Добавлено: Пн сен 25, 2017 22:51:18
Собутыльник Кота
Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04Сообщений: 2708Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
При наличии нескольких необработанных событий МК уйдёт в прерывание с более высоким приоритетом. Обработав его прмется за другое, если конечно за это время опять не произойдёт событие с высоким приоритетом. Как правило обработчик прерывания делается с максимально быстрым кодом.
_________________Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Вернуться наверх
BOB51
Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
Добавлено: Вт сен 26, 2017 06:43:13
Друг Кота
Карма: 96
Рейтинг сообщений: 1472
Зарегистрирован: Вт мар 16, 2010 22:02:27Сообщений: 15160Откуда: ДОНЕЦК
Рейтинг сообщения: 0
А такое вообще возможно, что бы два прерывания работали одновременно?
...
Возможно...
При том, что одно из прерываний таки всегда начнет обрабатываться раньше (и завершит обработку позднее).
Всего - то разрешить вложенные прерывания установкой флага I в SREG сразу за входом в первую из процедур обработки.
Однако необходимо внимательно высчитывать интервалы выполнения самих обработчиков на вопрос "самоперекрытия" (приход нового запроса до завершения обработки предыдущего).
Вернуться наверх
ozonn
Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
Добавлено: Вт сен 26, 2017 07:58:48
Карма: 6
Рейтинг сообщений: 7
Зарегистрирован: Чт янв 21, 2016 15:59:10Сообщений: 522
Рейтинг сообщения: 0
Всего - то разрешить вложенные прерывания установкой флага I в SREG сразу за входом в первую из процедур обработки.
флаг I разрешает все прерывания, а не вложенные. В атмеге одноуровневая система прерываний
Вернуться наверх
Страница 1 из 3
[ Сообщений: 42 ]
, ,
Кто сейчас на форуме
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 58
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения