Свежие обсуждения
Микроконтроллеры

"Железный" подход супротив программного.

1 2

Надо мерять длительность паузы между импульсами ( от спада до фронта,где-то 50-100 кГц) на АВР.
Что лучше, использовать таймер с захватом или программно обнюхивать компаратор? Далее надо будет выдать импульс на ногу некой длительности , в зависимости от намерянного.(здесь просится таймер.)
Это единственная задача для МК.

 

С таймером дискретность измерения будет равна периоду тактовой частоты.
С программным обнюхиванием (хороший термин ) в несколько раз больше.

 

Tadas: дискретность измерения будет равна периоду тактовой частоты.
А в некоторых есть ПЛЛ и 64 мГц, правда не знаю , есть ли там захват.
И этот захват , он аппаратно закачивается , а начинать его надо программно, или тоже можно аппаратно, по входному сигналу?

 

Alexey: Что лучше, использовать таймер с захватом или программно обнюхивать компаратор?
+1 за аппаратное решение.
Я его пока не использовал, но по моему он "взводится" программно, затем по одному фронту запускается таймер, а по второму останавливается. Затем Вы программно считываете значение таймера и взводите. Можно включить прерывание по завершению.

 

Сергей К: затем по одному фронту запускается таймер, а по второму останавливается.
Помоему, он запускается программно , по фронту , спаду, обоим -фиксируется , и можно прерывание.
Такшта программный геморой остается.

 

Не совсем корректно использовать термин "захват заканчивается".
Правильнее сказать: захват происходит при возникновении события.
Можно задавать от какого фронта будет происходить захват.
В рассматриваемом случае возможны два события - пришёл падающий фронт, пришёл нарастающий фронт.
Навскидку делается так:
Надо сконфигурировать таймер на прерывание от захвата, задать захват от падающего фронта.
В обработчике прерывания переключить на захват от нарастающего фронта и запомнить захваченное значение таймера (Т1).
При следующем прерывании зафиксировать захваченное значение (Т2) и выключить прерывание от захвата.
Вычислить длительность паузы Т2-Т1.
Выдать импульс по результату вычисления и повторить все сначала.

 

Tadas: Навскидку делается так:
Вычислить длительность паузы Т2-Т1.

Вот-вот, я и говорю -геморойно.

 

Что, вычесть одно число из другого геморойно ?

 

Ничего сложного. Все замеры выполняются по прерыванию. В основной программе просто забираем результат.
Но это все дело привычки. Раньше я тоже прерывания обходил стороной и измерение времени между срабатываниями компаратора делал в основной программе.

Плюс аппаратного способа в том, что значение таймера "защелкивается" в момент изменения фронта. Если делать это вручную или по прерыванию от ножки считывать значение таймера, то мы теряем несколько тактов таймера (на Си это может быть и десяток-другой, в зависимости от того насколько быстро получится считать значение таймера)

 

Сергей К: Раньше я тоже прерывания обходил стороной
Да не боюсь я их. Наоборот , все время использую.
Tadas: Что, вычесть одно число из другого геморойно ?
Вся эта возня. Плюс время на вход в прерывание.
Еще минус , что программно можно контролировать возможные помехи : слишком малую длительность, например.
Короче, для меня не все так однозначно.
Сергей К: на Си это может быть и десяток-другой
Си бывают разные. Но буду на Асм , все просто.