Перейти к содержанию
    

Mega8 ICP

Зравствуйте.

Программирую Mega8, и возникла проблема. Не получается сменить фронт импульса на контакте ICP во время работы прерываний. В даташите написано, что нужно сбросить в TIFR галочку. Делаю все по правилиам, в AVR Studio все работает, а залив в МК не работает. Для проверки добавил строки, что бы при одном фронте светодид загорался, при втором - гас. И получается, что МК будто не видит этот код программы, но в прирывания заходит (добавил код для другого светодиода).

Может кто знает как это решается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...

Программирую Mega8, и возникла проблема. Не получается сменить фронт импульса на контакте ICP во время работы прерываний. В даташите написано, что нужно сбросить в TIFR галочку.

...

В каком еще TIFR?! Чтобы сменить фронт нужно изменить бит ICES1 в регистре TCCR1B, а в TIFR флаг прерываний нужно сбрасывать, если запрос обрабатывается не в обработчике прерывания т. е. переход по вектору прерывания не выполняется.

Изменено пользователем smac

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То что нужно поставить/снять галочку ICES1 это понятно. А вот ICF1 в TIFR, как я понял из сказанного, надо снять не в прерывании, а после завершения. Спасибо, попробую.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То что нужно поставить/снять галочку ICES1 это понятно. А вот ICF1 в TIFR, как я понял из сказанного, надо снять не в прерывании, а после завершения. Спасибо, попробую.

 

Если вы обрабатываете захват в обработчике прерывания, то ICF1 в TIFR снимать не обязательно, от сам очистится при выполнении обработчика, а вот если вы не используете прерывания, то нужно его сбрасывать программно.

Также атмел рекоммендует сбрасывать ICF1 после смены источкика захвата (компаратор или пин ICP1), поскольку во время смены источкика может выставиться флаг ICF1.

Ну и на всякий случай, флаги прерываний сбрасываются записью 1.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А у меня сопутствующий вопрос о функции ножки ICP1, когда производится смена источника сигнала захвата.

Могу ли я использовать ножку ICP1 как обычный GPIO на момент архитектурного подключения аналогового компаратора к Таймеру 1 ?

Просто жесткое включение  ICP1 для функции захвата монополизирует ножку и никакие манипуляции c DDRD сменить направление работы линии исключает.

Чтобы это сделать собираюсь тупо менять ножку на внутренний аналоговый компаратор.(с запретом прерываний по capture)

Могу я себе позволить такой финт?

Речь о возможности построения 1-Wire по линии ICP1.... (по мотивам https://habr.com/ru/post/322710/ )

Что  скажут  корифеи AVR?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, Мур сказал:

Речь о возможности построения 1-Wire по линии ICP1.... (по мотивам https://habr.com/ru/post/322710/ )

Вопрос, зачем нужно такое садомазо? Задержки в 1wire это 480, 100, 10, 5 мкс. первые две спокойно реализуются обычной delay_us, т.к. там они могут быть +-лапоть, более точные можно сделать на асме по прерыванию обычного таймера, работы в прерывании там 5-7 команд, CRC можно потом посчитать, реакция на прерывание таймера по длительности такая-же точно, как ICP, перезагруз его новым значением занимает столько же времени...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

23 minutes ago, mantech said:

Вопрос, зачем нужно такое садомазо? Задержки в 1wire это 480, 100, 10, 5 мкс. первые две спокойно реализуются обычной delay_us, т.к. там они могут быть +-лапоть, более точные можно сделать на асме по прерыванию обычного таймера, работы в прерывании там 5-7 команд, CRC можно потом посчитать, реакция на прерывание таймера по длительности такая-же точно, как ICP, перезагруз его новым значением занимает столько же времени...

Если бы в системе существовала только задача Iware!!!

Фича в том, что тут не надо ничего ждать.  Система таймера1 аппаратно фиксирует в ICR регистре моменты ответов. Удобно как интервально, так и захватом пользоваться.

Вопрос в другом,-  сам вход ICP как забрать себе на ВЫХОД?  Простая перестройка на аналоговый компаратор (освободить ножку) поможет ли?   Я не нашел прямого ответа.  Почему и спрашиваю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...