Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 26093
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Прерывание по восходящему фронту в понимании ЦИФРОВЫХ УРОВНЕЙ - это и есть прерывание по изменению с 0 на 1.
Никаких других вариантов и нет.
Если Вам нужно анализировать СКОРОСТЬ изменения АНАЛОГОВОГО сигнала (на Ваших эпюрах именно это показано), то нужно вначале продифференцировать сигнал с помощью ФВЧ (например простейшей RC цепью), затем отнормировать его в логические уровни с помощью компаратора и лишь затем подать на вход прерываний. А проще воспользоваться встроенным в МК компаратором и активировать прерывание по изменению его выходного сигнала...
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 343
Зарегистрирован: Пн апр 01, 2013 15:13:40
Откуда: Москва

Сообщение Мikа »

Да, да, я вас понял, на тему цифровых уровней.Но судя по всему так и есть: прерывание по 0 или 1 - поднимают флаги непрерывно, пока 0 или 1 на жоке. А прерывания по фронтам поднимаю флаг однократно. Следующее прерывание по фронту возможно только при изменении уровня на противоположный и обратно. Спасибо :)
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Реклама
akl
Друг Кота
Сообщения: 4476
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Замечу, у AVR mega нет прерывания по уровню 1. Да и в других 90S, 90USB, TINY не замечал.
Друг Кота
Аватара пользователя
Сообщения: 26093
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Прерывания по изменению состояния пинов порта в общем и есть прерывание по УРОВНЮ, потому что оно взводится как результат сравнения состояния пина и защелки последнего из прочитанных состояний пина (порта).
То есть пока пин не будет прочитан флаг прерывания опустить не возможно...
А вот входы внешних прерываний реагируют только на активные фронты...
Реклама
Эиком - электронные компоненты и радиодетали
Chettuser

Сообщение Chettuser »

Удалось кому то уже пощупать PIC32MZ?
Чувствую до нас дойдёт еще не скоро.
Реклама
akl
Друг Кота
Сообщения: 4476
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

КРАМ писал(а):Прерывания по изменению состояния пинов порта в общем и есть прерывание по УРОВНЮ, потому что оно взводится как результат сравнения состояния пина и защелки последнего из прочитанных состояний пина (порта).
То есть пока пин не будет прочитан флаг прерывания опустить не возможно...
Извините, не убедили. Флаги обслуживания INTF0, INTF1 будут установлены до тех пор, пока на лапах INT0, INT1 будет низкий уровень. Причём, устанавливаются они асихронно и им пофиг сколько раз будет прочитан пин порта.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 26093
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

akl писал(а):Извините, не убедили. Флаги обслуживания INTF0, INTF1 будут установлены до тех пор, пока...
В AVR это зависит от настройки битов ISC00...ISC11 регистра MCUCR.
Если там одни НУЛИ, то прерывание будет ПО НИЗКОМУ УРОВНЮ, иначе - ПО ФРОНТУ.
В контроллерах PIC есть ОТДЕЛЬНЫЕ входы внешних прерываний и они работают только по активному фронту, а есть целый порт B, у которого ВСЕ ноги могут стать источниками прерываний ПО ИЗМЕНЕНИЮ СОСТОЯНИЯ каждого из этих пинов.
Поскольку для анализа ИЗМЕНЕНИЯ требуется некая БАЗА (защелкнутое исходное состояние), то это самое исходное состояние нужно принудительно зафиксировать в какой то момент времени. Делать это при входе в прерывание не вполне удобно, поскольку источник сигнала на пинах может иметь дребезг, а значит флаг прерывания может быть поднят несанкционировано через некоторое время после входа в обработчик....
В отличие от прерываний по фронту, прерывание по изменению состояния являются АСИНХРОННЫМИ и могут выводить МК из слипа, т.е. при ОСТАНОВЛЕННОМ ТАКТИРОВАНИИ....
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 174
Зарегистрирован: Вт сен 11, 2012 09:13:52
Откуда: Брест, Беларусь

Сообщение sphincs »

начинаю осваивать AVRы. путаюсь в сбросе флага и сбросе бита регистра. сброс бита регистра - это по всей видимости запись в него 0. а сброс флага - запись 1? т.е. флаг устанавливается записью в бит регистра нуля?
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 20135
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

sphincs писал(а):сброс бита регистра - это по всей видимости запись в него 0. а сброс флага - запись 1? т.е. флаг устанавливается записью в бит регистра нуля?
Флаг тоже является битом регистра, так что однозначный ответ по конкретному флагу даст только ДШ.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Друг Кота
Аватара пользователя
Сообщения: 26093
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Флагом называется такой бит некоего регистра, по значению которого определяется некое ветвление или вызов. Вызов может быть как программным, так и аппаратным (прерывание).
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

Дополню, в случае программного флага, флагом можно назвать не только бит, но и переменную любой разрядности. Все зависит от программиста.
В случае аппаратных флагов AVR - везде флаги = биты регистров.
Ставим плюсы: )
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 174
Зарегистрирован: Вт сен 11, 2012 09:13:52
Откуда: Брест, Беларусь

Сообщение sphincs »

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

Сообщение ARV »

sphincs писал(а):говорят в атмегах есть некие часы, которые считают время, прошедшее с начала работы.
говорят, в атмегах есть микро-заряд С4, который подрывается, если встроенный счетчик наработки превышает 0xFFFFFFFF часов :)))
sphincs писал(а):что искать/читать
просто с невероятной силой рекомендую вам читать даташиты. практически требую :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 4618
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

ARV писал(а):говорят, в атмегах есть микро-заряд С4, который подрывается, если встроенный счетчик наработки превышает 0xFFFFFFFF часов :)))
:)))
Ещё говорят, что на мегах нельзя делить на ноль - http://www.youtube.com/watch?v=mZ7pUADoo58 :)))
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

Ещё бесконечность в регистр не влазит...
"Я не даю готовых решений, я заставляю думать!"(С)
Chettuser

Сообщение Chettuser »

И фильмы не показывает в окошке в версии с УФ-стиранием.
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

HHIMERA писал(а):бесконечность в регистр не влазит
Влазит. Принимаем за бесконечность "1" и прописываем ее в регистр - вуаля. :))
Docendo discimus
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

подскажите пожалуйста, как сделать эллегантно
мне надо чтобы в прерывании по переполнению Т2 некая переменная Х увеличивала свое значение через раз т.е. через одно прерывание
в голову приходит только такой способ

Код: Выделить всё

if (++y>=2) {y=0, x++};
if (x>=6) x=0;
Tell Me The Truth
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18828
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

предлагаю более элегантный подход:

Код: Выделить всё

static uint8_t flag = 0;

if(++flag & 1) x++;
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

я так полагаю что надо еще обязательно дописать

Код: Выделить всё

if (flag==255) flag=0
иначе в мк крыша седет :))
так ?
Последний раз редактировалось FreshMan Чт апр 10, 2014 21:46:51, всего редактировалось 1 раз.
Tell Me The Truth
Ответить

Вернуться в «Разные вопросы по МК»