Прерывание по изменению уровня на INT0

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Встал на лапы
Аватара пользователя
Сообщения: 96
Зарегистрирован: Сб авг 15, 2009 07:31:56
Откуда: г. Кемерово

Сообщение -==MAXCELERON==- »

Ребят, какие соображения будут по поводу прерывания именно по изменению уровня на выводе INT0 или INT1 (не важно). Во многих AVR (ну например mega8, tiny2313 и т.д.) эта фича не поддерживается, там при нуле, по спаду либо при подъеме только!? :cry:
Реклама
Опытный кот
Аватара пользователя
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк

Сообщение sachok »

Мягко говоря, я ничего не понял!!! Вопрос задайте нормально тогда будем отвечать :evil:
Я не Сашок!!!
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

-==MAXCELERON==- писал(а):какие соображения будут по поводу прерывания именно по изменению уровня на выводе INT0 или INT1.Во многих AVR эта фича не поддерживается, там при нуле, по спаду либо при подъеме только!? :cry:
Если мне необходимо обработать подобные перепады и есть только один сигнал, то решением (простым) может явиться настройка скажем INT0 на передний фронт, а INT1 на задний фронт. Еще можно воспользоваться захватом таймера 1 (ICP). Если надо каждый отдельно, то лучше снаружи наваять схему выделения фронтов (на лп5 например) и будет все в ажуре.
PS Глянул DS на тиньку2313, зря Вы на нее наговариваете. Есть возможность сработать по любому изменению...(стр 62-63)
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 96
Зарегистрирован: Сб авг 15, 2009 07:31:56
Откуда: г. Кемерово

Сообщение -==MAXCELERON==- »

Meteor писал(а): Если надо каждый отдельно, то лучше снаружи наваять схему выделения фронтов (на лп5 например) и будет все в ажуре.
Хорошая идея, так и сделаю. Но все же хотелось бы минимум внешних деталей. Вы упомянули про захват таймера 1 (ICP), можно пожалуйстапоподробнее :P
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

-==MAXCELERON==- писал(а):...хотелось бы минимум внешних деталей. Вы упомянули про захват таймера 1 (ICP), можно пожалуйстапоподробнее :P
Можно, пожалуйста. Во вложении схема без обвязок и прочей "нечести", т.е. только идея. В обоих вариантах один из входов настраивается на срабатывание по переднему фронту (пусть INT0), второй-на задний. Дальше зависит от задачи, н-р надо найти ширину импульса. Тогда по переднему фронту записываем значения таймера и ставим флаг (можно и не ставить), по заднему фронту проводим вторую часть (новое время в этом случае и сброс флага). Далее только найти разницу. Такую задачу всегда лучше решать с захватом, т.к. фиксируется значение в регистрах таймера на момент срабатывания, для внешних прерываний надо будет поправить значение на время срабатывания. Если что-то другое, не время, то соответственно вписывать свою логику. Хитрого тут нет ничего.
Вложения
Interrupts.rar
Вставляйте рисунком в ворд или еще куда нибудь.
(3.02 КБ) 217 скачиваний
Контактная информация:
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 96
Зарегистрирован: Сб авг 15, 2009 07:31:56
Откуда: г. Кемерово

Сообщение -==MAXCELERON==- »

Meteor, ок, спасибо, идя понятна, буду пробовать. :))
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

-==MAXCELERON==- писал(а):... буду пробовать. :))
Дерзайте :)) Успехов!!!
На параллельной ветке схожие проблемы http://radiokot.ru/forum/viewtopic.php?t=19002
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 96
Зарегистрирован: Сб авг 15, 2009 07:31:56
Откуда: г. Кемерово

Сообщение -==MAXCELERON==- »

Meteor писал(а): На параллельной ветке схожие проблемы http://radiokot.ru/forum/viewtopic.php?t=19002
Нашел там гениальную идею :)))

char y = 1;

ISR(INT0_vect){ //Обработчик прерывания

if (y == 1){



y = 0;

MCUCR = 0x02; // Следующее прерывание по спаду
PORTC = 0xff;
}

else {
y = 1;
PORTC = 0x00;
MCUCR = 0x03; // Опять по повышению

}

} // Конец прерывания :)))
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18786
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

смотрите только, как бы в момент изменения MCUCR у вас не установился флаг прерывания... я бы на всякий случай перез завершением обработчика сбросил бы флажок INTFx
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

Сообщение -==MAXCELERON==- »

ARV писал(а):смотрите только, как бы в момент изменения MCUCR у вас не установился флаг прерывания... я бы на всякий случай перез завершением обработчика сбросил бы флажок INTFx
Не изменяется - проверил 8)
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

-==MAXCELERON==- писал(а): Не изменяется - проверил 8)
Лично меня не привлекает идея менять настройки прерывания в обработке этого же прерывания, как раз потому что имеет место меняться в самый ненужный момент :oops: или требует дополнительных изворотов.
И все же УСПЕХОВ!!!
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 96
Зарегистрирован: Сб авг 15, 2009 07:31:56
Откуда: г. Кемерово

Сообщение -==MAXCELERON==- »

Meteor писал(а): Лично меня не привлекает идея менять настройки прерывания в обработке этого же прерывания, как раз потому что имеет место меняться в самый ненужный момент :oops: или требует дополнительных изворотов.
И все же УСПЕХОВ!!!
Протестирую, на девайсе - декодере rc5, время покажет...
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

-==MAXCELERON==- писал(а):
Нашел там гениальную идею :)))

...
PORTC = 0xff;


else {
...
PORTC = 0x00;
...
А зачем смена порта? :shock: Меняйте только MCUCR. Своим заворотом PORTC=0x00 Вы только переводите его в третье состояние.. Заодно на командах сэкономите... :idea:
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 96
Зарегистрирован: Сб авг 15, 2009 07:31:56
Откуда: г. Кемерово

Сообщение -==MAXCELERON==- »

Meteor писал(а): А зачем смена порта? :shock: Меняйте только MCUCR. Своим заворотом PORTC=0x00 Вы только переводите вход в третье состояние.. Заодно на командах сэкономите... :idea:
Да нет Вы не так поняли. включение выключение порта - это чисто для проверки, вообще конечно там будет требуемый код ( если делать только MCUCR, то для какой цели вообще прерывание делать?? :shock: )
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

Ах да простите, не разобрался - бывает:) Гоняйте ентих единиц с нуликами, гоняйте. А то сопсем разленились, понимашь... :)))
PS. Разленились 0-и с 1-ми у МК, не Вы.
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк

Сообщение sachok »

Я канешно извиняюсь но режим Any change возможно подойдет. Будет происходить прерывание при каждом изменении уровня на INTx. Вот только не все (не на всех портах INT) это свойство доступно.
Я не Сашок!!!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

sachok писал(а):Я канешно извиняюсь но режим Any change возможно подойдет. Будет происходить прерывание при каждом изменении уровня на INTx. Вот только не все (не на всех портах INT) это свойство доступно.
Ну да это обработка по любой смене сигнала на входе. У топикстартера еще и "на резерв" вопросик получился, для случаев когда нету ентого ани ченжа:))
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 96
Зарегистрирован: Сб авг 15, 2009 07:31:56
Откуда: г. Кемерово

Сообщение -==MAXCELERON==- »

sachok писал(а):Я канешно извиняюсь но режим Any change возможно подойдет. Будет происходить прерывание при каждом изменении уровня на INTx. Вот только не все (не на всех портах INT) это свойство доступно.
Если бы был такой режим на моей mega8, то и вопроса бы не было. :idea:
Опытный кот
Аватара пользователя
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк

Сообщение sachok »

Что то я заплутался) Сначала в даташите пишет что только возрастающий,спадающий фронты и "0", а потом:
Изображение
Я не Сашок!!!
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 96
Зарегистрирован: Сб авг 15, 2009 07:31:56
Откуда: г. Кемерово

Сообщение -==MAXCELERON==- »

sachok писал(а): Сначала в даташите пишут что только возрастающий,спадающий фронты и "0", а потом:
По всей видимости этот даташит не от одного контроллера, а общий :?
Закрыто

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