Exstreem 0 5 февраля, 2009 Опубликовано 5 февраля, 2009 · Жалоба Зравствуйте. Программирую Mega8, и возникла проблема. Не получается сменить фронт импульса на контакте ICP во время работы прерываний. В даташите написано, что нужно сбросить в TIFR галочку. Делаю все по правилиам, в AVR Studio все работает, а залив в МК не работает. Для проверки добавил строки, что бы при одном фронте светодид загорался, при втором - гас. И получается, что МК будто не видит этот код программы, но в прирывания заходит (добавил код для другого светодиода). Может кто знает как это решается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smac 0 5 февраля, 2009 Опубликовано 5 февраля, 2009 (изменено) · Жалоба ... Программирую Mega8, и возникла проблема. Не получается сменить фронт импульса на контакте ICP во время работы прерываний. В даташите написано, что нужно сбросить в TIFR галочку. ... В каком еще TIFR?! Чтобы сменить фронт нужно изменить бит ICES1 в регистре TCCR1B, а в TIFR флаг прерываний нужно сбрасывать, если запрос обрабатывается не в обработчике прерывания т. е. переход по вектору прерывания не выполняется. Изменено 5 февраля, 2009 пользователем smac Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Exstreem 0 6 февраля, 2009 Опубликовано 6 февраля, 2009 · Жалоба То что нужно поставить/снять галочку ICES1 это понятно. А вот ICF1 в TIFR, как я понял из сказанного, надо снять не в прерывании, а после завершения. Спасибо, попробую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smac 0 6 февраля, 2009 Опубликовано 6 февраля, 2009 · Жалоба То что нужно поставить/снять галочку ICES1 это понятно. А вот ICF1 в TIFR, как я понял из сказанного, надо снять не в прерывании, а после завершения. Спасибо, попробую. Если вы обрабатываете захват в обработчике прерывания, то ICF1 в TIFR снимать не обязательно, от сам очистится при выполнении обработчика, а вот если вы не используете прерывания, то нужно его сбрасывать программно. Также атмел рекоммендует сбрасывать ICF1 после смены источкика захвата (компаратор или пин ICP1), поскольку во время смены источкика может выставиться флаг ICF1. Ну и на всякий случай, флаги прерываний сбрасываются записью 1. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Exstreem 0 6 февраля, 2009 Опубликовано 6 февраля, 2009 · Жалоба Спасибо, smac . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 28 февраля, 2020 Опубликовано 28 февраля, 2020 · Жалоба А у меня сопутствующий вопрос о функции ножки ICP1, когда производится смена источника сигнала захвата. Могу ли я использовать ножку ICP1 как обычный GPIO на момент архитектурного подключения аналогового компаратора к Таймеру 1 ? Просто жесткое включение ICP1 для функции захвата монополизирует ножку и никакие манипуляции c DDRD сменить направление работы линии исключает. Чтобы это сделать собираюсь тупо менять ножку на внутренний аналоговый компаратор.(с запретом прерываний по capture) Могу я себе позволить такой финт? Речь о возможности построения 1-Wire по линии ICP1.... (по мотивам https://habr.com/ru/post/322710/ ) Что скажут корифеи AVR? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 34 28 февраля, 2020 Опубликовано 28 февраля, 2020 · Жалоба 2 часа назад, Мур сказал: Речь о возможности построения 1-Wire по линии ICP1.... (по мотивам https://habr.com/ru/post/322710/ ) Вопрос, зачем нужно такое садомазо? Задержки в 1wire это 480, 100, 10, 5 мкс. первые две спокойно реализуются обычной delay_us, т.к. там они могут быть +-лапоть, более точные можно сделать на асме по прерыванию обычного таймера, работы в прерывании там 5-7 команд, CRC можно потом посчитать, реакция на прерывание таймера по длительности такая-же точно, как ICP, перезагруз его новым значением занимает столько же времени... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 28 февраля, 2020 Опубликовано 28 февраля, 2020 · Жалоба 23 minutes ago, mantech said: Вопрос, зачем нужно такое садомазо? Задержки в 1wire это 480, 100, 10, 5 мкс. первые две спокойно реализуются обычной delay_us, т.к. там они могут быть +-лапоть, более точные можно сделать на асме по прерыванию обычного таймера, работы в прерывании там 5-7 команд, CRC можно потом посчитать, реакция на прерывание таймера по длительности такая-же точно, как ICP, перезагруз его новым значением занимает столько же времени... Если бы в системе существовала только задача Iware!!! Фича в том, что тут не надо ничего ждать. Система таймера1 аппаратно фиксирует в ICR регистре моменты ответов. Удобно как интервально, так и захватом пользоваться. Вопрос в другом,- сам вход ICP как забрать себе на ВЫХОД? Простая перестройка на аналоговый компаратор (освободить ножку) поможет ли? Я не нашел прямого ответа. Почему и спрашиваю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться