Фазовый компаратор на Ардуино
- Войдите на сайт для отправки комментариев
Втр, 24/08/2021 - 12:58
В принципе вопрос в заголовке темы, кто реализовывал программно, есть пример, в Гугл не нашёл.
В принципе вопрос в заголовке темы, кто реализовывал программно, есть пример, в Гугл не нашёл.
В лоб написать не судьба?
так блокирующий жеж
Тебе на блинк без делея ссылку дать?
Тебе на блинк без делея ссылку дать?
не надо, подумалось может кто на PCINT делал...
Видимо как-то так!?
Плохо. На PCINT есть ограничения на частоту ну и фазу соответственно. Надо на два отдельных пина со своими прерываниями.
Плохо. На PCINT есть ограничения на частоту ну и фазу соответственно. Надо на два отдельных пина со своими прерываниями.
интересно какие (по частоте)
PCINT не различает ноги. После срабатывания прерывания надо ещё читать значения пинов и проанализировать, что бы понять какой из пинов сработал первым. Это требует времени. Собственно эти лишние затраты на чтение и анализ выливаются в довольно длинные процедуры, которые и ограничивают входную частоту, если ещё и фазу надо точнее получить.
весь обработчик в 19 строке, прочитать два бита порта и сделать с ними исключающее ИЛИ в кодах видимо небольшие затраты будут, но проще аппаратно конечно решить
Для таких приложений надо считать не строки а конечные машинные коды. В любом случае через INT0 и INT1 обработка существенно короче.
через INT0 и INT1 обработка существенно короче.
Если их делать _NAKED, иначе пасёравну.
через INT0 и INT1 обработка существенно короче.
Если их делать _NAKED, иначе пасёравну.
теперь на хоббийный переведи, пожалуйста...вот читал жеж, только уже ничего не запоминается:
Параметр ISR_NAKED
В некоторых случаях код, генерируемый компилятором для сохранения и восстановления значений регистров внутри обработчика, может быть не оптимальным. Например, приведенный выше обработчик для WDT не выполняет вообще никаких действий, тем не менее значения трех регистров сохраняются в стеке. Если нас не устраивает генерируемый компилятором код, то можно подавить его добавление в обработчик, указав во втором параметре макроса ISR значение ISR_NAKED. В этом случае в обработчик не будут добавлены ни код для сохранения регистров, ни даже команда возврата в основную программу reti, ответственность за корректную работу обработчика ложится на нас. Пример использования ISR_NAKED:
ISR(TIMER1_OVF_vect, ISR_NAKED) { PORTB |= _BV(0); reti(); }
Вызов без сохранения/восстановления SREG.
Не только SREG, там для ускорения выполнения ни один регистр не сохраняется при входе, если какие-то регистры используются в подпрограмме, надо их сохранять/восстанавливать самому, врукопашную
Для таких приложений надо считать не строки а конечные машинные коды. В любом случае через INT0 и INT1 обработка существенно короче.
Кроме того, я что-то не припомню PCINT на ARM.
Другими словами, если уж ми пишем на форуме Ардуино и, кроме того, выносим "Ардуино" в заголовок темы, то и обсуждать следует именно Ардуино, а в Ардуино PCINT нет.
а в Ардуино PCINT нет.
О_О Чойта? Клапа запретил? А как у меня тогда счетчики воды работают на Uno? Пойду проверять срочно. :)))
в Ардуино PCINT нет.
выбираю ардуино нано, олд бутлоадер, компилирую, загружаю, работает, "...???... как нет, есть, но маленький" (из народного фольклора)
На AVR PCINT, не ARM.
Полагаю, что имелось в виду следующее: в некоторых МК оно есть, но это уже вне концепции платформы Arduino.
а в Ардуино PCINT нет.
О_О Чойта? Клапа запретил? А как у меня тогда счетчики воды работают на Uno? Пойду проверять срочно. :)))
Будешь проверять, проверь заодно на Due.