Внешние прерывания в ATtiny13

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
mvs9
Родился
Сообщения: 3
Зарегистрирован: Ср авг 04, 2010 09:50:49

Внешние прерывания в ATtiny13

Сообщение mvs9 »

Как определить, от которого входа произошло внешнее прерывание, если разрешено (и возможно) прерывание от нескольких внешних выводов?
Реклама
Аватара пользователя
>TEHb<
Друг Кота
Сообщения: 5744
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Откуда: Воронеж
Контактная информация:

Re: Внешние прерывания в ATtiny13

Сообщение >TEHb< »

У них адреса разные. Ведь наверняка не читали документацию, а сразу кинулись сюда.
"Привет!" - соврал он.
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18614
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Внешние прерывания в ATtiny13

Сообщение ARV »

очевидно, речь не о ВНЕШНИХ прерываниях INT0 и INT1, а о PIN CHANGE INTERRUPT - то есть о прерывании по изменению уровня на любом из пинов? если так, то надо считать порт и посмотреть, какие биты в нем изменились - вот вам и определение, от которого сработало все :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
mvs9
Родился
Сообщения: 3
Зарегистрирован: Ср авг 04, 2010 09:50:49

Re: Внешние прерывания в ATtiny13

Сообщение mvs9 »

>TEHb< писал(а):У них адреса разные. Ведь наверняка не читали документацию, а сразу кинулись сюда.
Нет, не наверняка. Кинулся сюда, после того, как не нашел нужной информации.
ARV писал(а):очевидно, речь не о ВНЕШНИХ прерываниях INT0 и INT1, а о PIN CHANGE INTERRUPT - то есть о прерывании по изменению уровня на любом из пинов? если так, то надо считать порт и посмотреть, какие биты в нем изменились - вот вам и определение, от которого сработало все :)))
Именно этот случай. Но так все довольно криво получается: прерывания генерируются на любое изменение состояния входов, т.е. нужно отслеживать, какие состояния входов были до прерывания (или в предыдущем прерывании).
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18614
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Внешние прерывания в ATtiny13

Сообщение ARV »

даже и не знаю, в чем кривость? при инициализации

Код: Выделить всё

volatile unsigned char prev_port = PINB;
а сам обработчик прерывания

Код: Выделить всё

ISR(PCINT0_vect){
   switch(PINB ^ prev_port){
   // тут обрабатываем варианты изменения пинов
   case 0b00000001:
   case 0b00000010:
   // и т.д. - вариантов много, особенно если могут быть одновременные изменения нескольких пинов
   }
   prev_port = PINB;
}
что тут криво?!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
mvs9
Родился
Сообщения: 3
Зарегистрирован: Ср авг 04, 2010 09:50:49

Re: Внешние прерывания в ATtiny13

Сообщение mvs9 »

Спасибо, в таком виде намного прямее, чем я представлял.
Честно говоря, для меня, как для многолетнего Паскалиста и Дельфиста, любая СИшная нотация - кривая :)
Реклама
Аватара пользователя
>TEHb<
Друг Кота
Сообщения: 5744
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Откуда: Воронеж
Контактная информация:

Re: Внешние прерывания в ATtiny13

Сообщение >TEHb< »

ARV писал(а):очевидно, речь не о ВНЕШНИХ прерываниях INT0 и INT1, а о PIN CHANGE INTERRUPT
Тогда извиняйте. В тини13 не так уж и много вариантов, так что один лишний байтик вполне можно выделить. А си да, слегка сбивает с толку после паскаля.
"Привет!" - соврал он.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18614
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Внешние прерывания в ATtiny13

Сообщение ARV »

>TEHb< писал(а):Тогда извиняйте.
да ладно, чего там...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
xkp
Опытный кот
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров
Контактная информация:

Re: Внешние прерывания в ATtiny13

Сообщение xkp »

можно ли задействовать PB4(PCIN4) заместо INT0? нужно отслеживать фронтальное изменение сигнала. а пока плату делал - маленько накосячил и завел сигнал не на PB2(INT0) а на PB4(PCINT4)
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Внешние прерывания в ATtiny13

Сообщение Engineer_Keen »

В чем проблема? Программу перепишите и все... PCINT от INT0-1 отличается только общим вектором для всего порта и отсутствием режима прерывания по уровню.
Аватара пользователя
xkp
Опытный кот
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров
Контактная информация:

Re: Внешние прерывания в ATtiny13

Сообщение xkp »

проблема в том что ни как не найду как разрешить именно только от PCINT4.
OUTI MCUCR,(1<<ISC00)|(1<<ISC01) ;срабатывание по нарастанию INT0
OUTI GIMSK,(1<<INT0) ;разрешаем INT0 от внешнего сигнела
чем заменить вторую строчку?

ps. первую тоже менять надо?
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Внешние прерывания в ATtiny13

Сообщение Engineer_Keen »

MCUCR не нужен, в GIMSK ставим бит PCIE, в PCMSK ставим PCINT4, а чтобы ловить только передний фронт - в самом прерывании проверяем

Код: Выделить всё

SBIS PINB,PB4 ;проверяем фронт
RETI ;выход, если задний
...
делаем что надо, если передний фронт
...
RETI
Аватара пользователя
xkp
Опытный кот
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров
Контактная информация:

Re: Внешние прерывания в ATtiny13

Сообщение xkp »

спасибо

Код: Выделить всё

	. . .
	OUTI   GIMSK,(1<<PCIE)				;разрешаем PCINT4 от внешнего сигнела
	OUTI   PCMSK,(1<<PCINT4)
	sei
	main:
. . .
	rjmp main

PCINT_0:
	SBIS PINB,PB4 ;проверяем фронт
	RETI
. . .
	reti
.org $00
	rjmp RESET		;Reset Handler
	reti			;rjmp EXT_INT0 ; IRQ0 Handler
	rjmp PCINT_0	; PCINT0 Handler
	reti			;rjmp TIM0_OVF ; Timer0 Overflow Handler
	reti			;rjmp EE_RDY ; EEPROM Ready Handler
	reti			;rjmp ANA_COMP ; Analog Comparator Handler
	reti			;rjmp TIM0_COMPA ; Timer0 CompareA Handler
	reti			;rjmp TIM0_COMPB ; Timer0 CompareB Handler
	reti			;rjmp WATCHDOG ; Watchdog Interrupt Handler
	reti			;rjmp ADC_inc ; ADC Conversion Handler
работает
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»