Внешние прерывания в ATtiny13
Внешние прерывания в ATtiny13
Как определить, от которого входа произошло внешнее прерывание, если разрешено (и возможно) прерывание от нескольких внешних выводов?
- Реклама
- >TEHb<
- Друг Кота
- Сообщения: 5744
- Зарегистрирован: Ср ноя 11, 2009 17:19:30
- Откуда: Воронеж
- Контактная информация:
Re: Внешние прерывания в ATtiny13
У них адреса разные. Ведь наверняка не читали документацию, а сразу кинулись сюда.
"Привет!" - соврал он.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18629
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Внешние прерывания в ATtiny13
очевидно, речь не о ВНЕШНИХ прерываниях INT0 и INT1, а о PIN CHANGE INTERRUPT - то есть о прерывании по изменению уровня на любом из пинов? если так, то надо считать порт и посмотреть, какие биты в нем изменились - вот вам и определение, от которого сработало все 
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Внешние прерывания в ATtiny13
Нет, не наверняка. Кинулся сюда, после того, как не нашел нужной информации.>TEHb< писал(а):У них адреса разные. Ведь наверняка не читали документацию, а сразу кинулись сюда.
Именно этот случай. Но так все довольно криво получается: прерывания генерируются на любое изменение состояния входов, т.е. нужно отслеживать, какие состояния входов были до прерывания (или в предыдущем прерывании).ARV писал(а):очевидно, речь не о ВНЕШНИХ прерываниях INT0 и INT1, а о PIN CHANGE INTERRUPT - то есть о прерывании по изменению уровня на любом из пинов? если так, то надо считать порт и посмотреть, какие биты в нем изменились - вот вам и определение, от которого сработало все
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18629
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Внешние прерывания в ATtiny13
даже и не знаю, в чем кривость? при инициализацииа сам обработчик прерываниячто тут криво?!
Код: Выделить всё
volatile unsigned char prev_port = PINB;Код: Выделить всё
ISR(PCINT0_vect){
switch(PINB ^ prev_port){
// тут обрабатываем варианты изменения пинов
case 0b00000001:
case 0b00000010:
// и т.д. - вариантов много, особенно если могут быть одновременные изменения нескольких пинов
}
prev_port = PINB;
}если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
Re: Внешние прерывания в ATtiny13
Спасибо, в таком виде намного прямее, чем я представлял.
Честно говоря, для меня, как для многолетнего Паскалиста и Дельфиста, любая СИшная нотация - кривая
Честно говоря, для меня, как для многолетнего Паскалиста и Дельфиста, любая СИшная нотация - кривая
- >TEHb<
- Друг Кота
- Сообщения: 5744
- Зарегистрирован: Ср ноя 11, 2009 17:19:30
- Откуда: Воронеж
- Контактная информация:
Re: Внешние прерывания в ATtiny13
Тогда извиняйте. В тини13 не так уж и много вариантов, так что один лишний байтик вполне можно выделить. А си да, слегка сбивает с толку после паскаля.ARV писал(а):очевидно, речь не о ВНЕШНИХ прерываниях INT0 и INT1, а о PIN CHANGE INTERRUPT
"Привет!" - соврал он.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18629
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Внешние прерывания в ATtiny13
да ладно, чего там...>TEHb< писал(а):Тогда извиняйте.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: Внешние прерывания в ATtiny13
можно ли задействовать PB4(PCIN4) заместо INT0? нужно отслеживать фронтальное изменение сигнала. а пока плату делал - маленько накосячил и завел сигнал не на PB2(INT0) а на PB4(PCINT4)
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Внешние прерывания в ATtiny13
В чем проблема? Программу перепишите и все... PCINT от INT0-1 отличается только общим вектором для всего порта и отсутствием режима прерывания по уровню.
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: Внешние прерывания в ATtiny13
проблема в том что ни как не найду как разрешить именно только от PCINT4.
OUTI MCUCR,(1<<ISC00)|(1<<ISC01) ;срабатывание по нарастанию INT0
OUTI GIMSK,(1<<INT0) ;разрешаем INT0 от внешнего сигнела
чем заменить вторую строчку?
ps. первую тоже менять надо?
OUTI MCUCR,(1<<ISC00)|(1<<ISC01) ;срабатывание по нарастанию INT0
OUTI GIMSK,(1<<INT0) ;разрешаем INT0 от внешнего сигнела
чем заменить вторую строчку?
ps. первую тоже менять надо?
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Внешние прерывания в ATtiny13
MCUCR не нужен, в GIMSK ставим бит PCIE, в PCMSK ставим PCINT4, а чтобы ловить только передний фронт - в самом прерывании проверяем
Код: Выделить всё
SBIS PINB,PB4 ;проверяем фронт
RETI ;выход, если задний
...
делаем что надо, если передний фронт
...
RETI
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: Внешние прерывания в ATtiny13
спасибо работает
Код: Выделить всё
. . .
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 HandlerR5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic


