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

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

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

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

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

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

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

 
Опции темы
Непрочитано 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.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
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.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
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 18:11


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot