Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы

Прерывание по совпадению таймера 1

Непрочитано 02.09.2012, 11:44  
gruffi
Прописка
 
Аватар для gruffi
 
Регистрация: 01.02.2012
Сообщений: 131
Сказал спасибо: 9
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
gruffi на пути к лучшему
По умолчанию Прерывание по совпадению таймера 1

Доброе утро, Форумчане! Решил у Вам просить помощи, а то чего-то не догоняю. Мне необходимо при срабатывании внешнего прерывания INT0 запустить таймер 1. Так и делаю, но отловив внешнее прерывание таймер запускается, но прерывания так и не происходит. В отладчике вижу что TCNT1 обнуляется при сравнении, но в функцию так и не заходит...Привожу функции инициализации и обработки прерываний:
Код:
void INCUBATOR_Init()
{
	//TIME_Init();
	
	DDRB  &= (1 ‹‹ 0) | (1 ‹‹ 1);
	PORTB |= (1 ‹‹ 0) | (1 ‹‹ 1);
	
	DDRC |= (1 ‹‹ 0);
	PORTC &= ~(1 ‹‹ 0);
	
	DDRD  &= ~(1 ‹‹ 2);
	PORTD |= (1 ‹‹ 2);
	
	GICR  |= (1 ‹‹ INT0); //разрешили прерывание
	MCUCR = 0x00;
	
	SREG |= (1 ‹‹ 7);
}
//------------
ISR(INT0_vect)
{
	if(!enableZeroCross)
	{
		enableZeroCross = true;
		
		OCR1A   = delay_dimmer; // Значение для сравнения
		TCNT1   = 0;     // счетчик в ноль
		TCCR1B |= (1 ‹‹ CS10) | ( 1‹‹ WGM12);  // без предделителя и режим СТС по совпадению
		TIMSK  = (1 ‹‹ OCIE1A); // Разрешить прерывание при совпадении TCNT1 и OCR1A
	}
}
//--------------------
ISR(TIMER1_COMPA_vect)
{
	if(enableZeroCross)
	{
		TCNT1 = 0;
		TCCR1B = 0x00;
		
		PORTC |= (1 ‹‹ 0); // включить симмистор
		_delay_us(50);
		PORTC &= ~(1 ‹‹ 0);
		enableZeroCross = false;	
	}
}
Реклама:
gruffi вне форума  
Сказали "Спасибо" gruffi
warel (29.06.2019)
Непрочитано 02.09.2012, 11:45  
gruffi
Прописка
 
Аватар для gruffi
 
Регистрация: 01.02.2012
Сообщений: 131
Сказал спасибо: 9
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
gruffi на пути к лучшему
По умолчанию Re: Прерывание по совпадению таймера 1

пишу в avr studio...
gruffi вне форума  
Сказали "Спасибо" gruffi
warel (29.06.2019)
Непрочитано 02.09.2012, 12:45  
Maxim39
Прописка
 
Аватар для Maxim39
 
Регистрация: 07.02.2010
Адрес: Калининград
Сообщений: 148
Сказал спасибо: 72
Сказали Спасибо 23 раз(а) в 20 сообщении(ях)
Maxim39 на пути к лучшему
По умолчанию Re: Прерывание по совпадению таймера 1

Это кусок моей программы которая использует прерывания от INT0 и от TMR0,1, все работает. Пишу на АСМ так что интерпретируй под свой язык.

BANK0
CLRWDT
MOVLW b'00110001' ; 7-6 не реализованы читаются 0
MOVWF T1CON ; 5-4 коэффициент деления предделителя TMR1 11=8 (00=1 01=2 10=4)
; 3 T1OSCEN 1=вкл 0=откл внутренний генератор для таймера
; 2 T1SYNC 1=вкл 0=откл синхронизация внешнего генератора
; 1 TMR1SC 1=внешний 0=внутренний см. стр. 48
; 0 TMR1ON 1=вкл 0=выкл модуль TMR1 целиком.

MOVWF T1CON
BANK1
MOVLW b'11010000' ; разрешаем прерывание от перефирии и от внешнего контакта
MOVWF INTCON ; 7 GIE 1=разрешено 0=запрещено
; 6 PEIE 1=да 0=нет прерывание от перефирии
; 5 T0IE 1=да 0=нет прерывание от переполнения TMR0
; 4 INTE 1=да 0=нет прерывание от INT
; 3 RBIE 1=да 0=нет прерывание от RB4-7
; 2 T0IF 1=да 0=нет было ли прерывание от TMR0
; 1 INTF 1=да 0=нет было ли прерывание от INT
; 0 RBIF 1=да 0=нет было ли прерывание от RB4-7

MOVLW b'00000001' ; разрешаем прерывание от переполнения TMR1 ***
MOVWF PIE1 ; настройка переферийных прерываний
; 7 EEIE 1=разрешено 0=запрещено от окончания записи в ЕПРОМ
; 6 CMIE 1=да 0=нет разрешить прерывание от компараторов
; 5 RCIE 1=да 0=нет разрешить прерывание от приемника USART
; 4 TXIE 1=да 0=нет разрешить прерывание от передатчика USART
; 3 не реализован всегда 0
; 2 CCP1IE 1=да 0=нет разрешить прерывание от модуля ССР1
; 1 TMR2IE 1=да 0=нет разрешить прерывание от переполнения TMR2
; 0 TMR1IE 1=да 0=нет разрешить прерывание от переполнения TMR1
__________________
Лужу, паяю, ЭВМ починяю.....
Maxim39 вне форума  
Сказали "Спасибо" Maxim39
warel (29.06.2019)
Непрочитано 02.09.2012, 12:56  
gruffi
Прописка
 
Аватар для gruffi
 
Регистрация: 01.02.2012
Сообщений: 131
Сказал спасибо: 9
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
gruffi на пути к лучшему
По умолчанию Re: Прерывание по совпадению таймера 1

Спасибо, правда асм я знаю поскольку-постольку, да и контроллер atmega (извиняюсь, не написал).
gruffi вне форума  
Сказали "Спасибо" gruffi
warel (29.06.2019)
Непрочитано 02.09.2012, 13:07  
Maxim39
Прописка
 
Аватар для Maxim39
 
Регистрация: 07.02.2010
Адрес: Калининград
Сообщений: 148
Сказал спасибо: 72
Сказали Спасибо 23 раз(а) в 20 сообщении(ях)
Maxim39 на пути к лучшему
По умолчанию Re: Прерывание по совпадению таймера 1

Это я поторопился потом дошло что контроллер другой.
Но думаю порядок действий такойже
__________________
Лужу, паяю, ЭВМ починяю.....
Maxim39 вне форума  
Сказали "Спасибо" Maxim39
warel (29.06.2019)
Непрочитано 02.09.2012, 13:14  
niXto
Почётный гражданин KAZUS.RUN
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Прерывание по совпадению таймера 1

Пока контроллер находится в прерывании (INT) то остальные прерывания (таймер) запрещены. Если надо, ручками устанавливай флаг I

TIMSK настроил?
niXto вне форума  
Сказали "Спасибо" niXto
warel (29.06.2019)
Непрочитано 02.09.2012, 13:15  
gruffi
Прописка
 
Аватар для gruffi
 
Регистрация: 01.02.2012
Сообщений: 131
Сказал спасибо: 9
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
gruffi на пути к лучшему
По умолчанию Re: Прерывание по совпадению таймера 1

флаги разные, не все конечно...просто не понятно почему не работает. Таймер работает, запускается и считает и при совпадении сбрасывается в ноль и так далее. Думал может TIMER1_COMPA_vect неправильное название прерывания, но посмотрел везде, вроде бы правильное, да и компилер не ругается...Если счет идет, значит таймер настроен верно...
gruffi вне форума  
Сказали "Спасибо" gruffi
warel (29.06.2019)
Непрочитано 02.09.2012, 13:18  
gruffi
Прописка
 
Аватар для gruffi
 
Регистрация: 01.02.2012
Сообщений: 131
Сказал спасибо: 9
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
gruffi на пути к лучшему
По умолчанию Re: Прерывание по совпадению таймера 1

Сообщение от niXto Посмотреть сообщение
Если надо, ручками устанавливай флаг I
Цитата:
SREG |= (1 ‹‹ 7); - устанавливаю при инициализации INT0
или надо каждый раз?

Сообщение от niXto Посмотреть сообщение
TIMSK настроил?
Цитата:
TIMSK = (1 ‹‹ OCIE1A);
gruffi вне форума  
Сказали "Спасибо" gruffi
warel (29.06.2019)
Непрочитано 02.09.2012, 14:34  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Прерывание по совпадению таймера 1

Сообщение от gruffi Посмотреть сообщение
таймер запускается, но прерывания так и не происходит
Кагбэ проверил.
После конфига TIMSK прерывание как бы происходит, но как-то странно...
переходит сюда - USART Data Register(UDR) Empty. Это в отладчике, ессно.
Итак, знатоки, внимание - вопрос - Это глюк или теракт?

test.zip
ПыСы. Студию тока что переустановил 4.18 Build 716 (SP3)
omercury вне форума  
Сказали "Спасибо" omercury
warel (29.06.2019)
Непрочитано 02.09.2012, 14:49  
gruffi
Прописка
 
Аватар для gruffi
 
Регистрация: 01.02.2012
Сообщений: 131
Сказал спасибо: 9
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
gruffi на пути к лучшему
По умолчанию Re: Прерывание по совпадению таймера 1

Так где может быть ошибка?
gruffi вне форума  
Сказали "Спасибо" gruffi
warel (29.06.2019)
 
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как настроить прерывание от таймера реального времени c04 Микроконтроллеры, АЦП, память и т.д 0 25.05.2010 21:19
Внешнее прерывание на tiny15 livsha Микроконтроллеры, АЦП, память и т.д 8 21.04.2010 01:11
Странно работает прерывание при совпадении таймера! nagano Микроконтроллеры, АЦП, память и т.д 5 18.11.2008 09:35
не обрабатывается прерывание от таймера во время АЦП rusakov_a Микроконтроллеры, АЦП, память и т.д 0 03.07.2008 01:33
Задача - таймер. и прерывание! chipic128 Микроконтроллеры, АЦП, память и т.д 11 22.02.2005 17:11


Часовой пояс GMT +4, время: 19:49.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.