Внешние прерывания в ATtiny13
- Сообщения: 3
- Зарегистрирован: Ср авг 04, 2010 09:50:49
Как определить, от которого входа произошло внешнее прерывание, если разрешено (и возможно) прерывание от нескольких внешних выводов?
- Реклама
У них адреса разные. Ведь наверняка не читали документацию, а сразу кинулись сюда.
Усложнять просто. Упрощать сложно.
очевидно, речь не о ВНЕШНИХ прерываниях INT0 и INT1, а о PIN CHANGE INTERRUPT - то есть о прерывании по изменению уровня на любом из пинов? если так, то надо считать порт и посмотреть, какие биты в нем изменились - вот вам и определение, от которого сработало все 
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 3
- Зарегистрирован: Ср авг 04, 2010 09:50:49
Нет, не наверняка. Кинулся сюда, после того, как не нашел нужной информации.>TEHb< писал(а):У них адреса разные. Ведь наверняка не читали документацию, а сразу кинулись сюда.
Именно этот случай. Но так все довольно криво получается: прерывания генерируются на любое изменение состояния входов, т.е. нужно отслеживать, какие состояния входов были до прерывания (или в предыдущем прерывании).ARV писал(а):очевидно, речь не о ВНЕШНИХ прерываниях INT0 и INT1, а о PIN CHANGE INTERRUPT - то есть о прерывании по изменению уровня на любом из пинов? если так, то надо считать порт и посмотреть, какие биты в нем изменились - вот вам и определение, от которого сработало все
даже и не знаю, в чем кривость? при инициализацииа сам обработчик прерываниячто тут криво?!
Код: Выделить всё
volatile unsigned char prev_port = PINB;Код: Выделить всё
ISR(PCINT0_vect){
switch(PINB ^ prev_port){
// тут обрабатываем варианты изменения пинов
case 0b00000001:
case 0b00000010:
// и т.д. - вариантов много, особенно если могут быть одновременные изменения нескольких пинов
}
prev_port = PINB;
}если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
- Сообщения: 3
- Зарегистрирован: Ср авг 04, 2010 09:50:49
Спасибо, в таком виде намного прямее, чем я представлял.
Честно говоря, для меня, как для многолетнего Паскалиста и Дельфиста, любая СИшная нотация - кривая
Честно говоря, для меня, как для многолетнего Паскалиста и Дельфиста, любая СИшная нотация - кривая
Тогда извиняйте. В тини13 не так уж и много вариантов, так что один лишний байтик вполне можно выделить. А си да, слегка сбивает с толку после паскаля.ARV писал(а):очевидно, речь не о ВНЕШНИХ прерываниях INT0 и INT1, а о PIN CHANGE INTERRUPT
Усложнять просто. Упрощать сложно.
да ладно, чего там...>TEHb< писал(а):Тогда извиняйте.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
можно ли задействовать PB4(PCIN4) заместо INT0? нужно отслеживать фронтальное изменение сигнала. а пока плату делал - маленько накосячил и завел сигнал не на PB2(INT0) а на PB4(PCINT4)
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
В чем проблема? Программу перепишите и все... PCINT от INT0-1 отличается только общим вектором для всего порта и отсутствием режима прерывания по уровню.
проблема в том что ни как не найду как разрешить именно только от 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
MCUCR не нужен, в GIMSK ставим бит PCIE, в PCMSK ставим PCINT4, а чтобы ловить только передний фронт - в самом прерывании проверяем
Код: Выделить всё
SBIS PINB,PB4 ;проверяем фронт
RETI ;выход, если задний
...
делаем что надо, если передний фронт
...
RETI
спасибо работает
Код: Выделить всё
. . .
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


