Автор Тема: Как реализовать подсчет тактовых импульсов ?  (Прочитано 10655 раз)

Metalist

  • Newbie
  • *
  • Сообщений: 16
    • Просмотр профиля
Есть входящий импульс длительностью 20...100мкс и нужно
вывести переменную максимально точно указывающую длительность импульса, но подсчета самих "мкс" недостаточно для достижения нужной точности. Собираюсь использовать Atmega8-16PU. Вопрос: можно ли реализовать подсчет тактовых импульсов самого МК или это получится только с отдельным тактовым генератором (не путать с внешним тактовым генератором МК) ? если да, то как это сделать или в какую сторону копать ?
Можно ли обойтись без вставок на Си и Асемблер ?

Taska

  • Hero Member
  • *****
  • Сообщений: 1801
    • Просмотр профиля
Re:Как реализовать подсчет тактовых импульсов ?
« Ответ #1 : Декабрь 09, 2011, 13:29:29 »
В Atmega8-16PU есть таймеры и если в настройках таймера прескалер установить 1:1 то таймер будет считать тактовые импульсы контроллера.
Без вставок не обойдешься
Вот темку посмотри http://flowcode.info/smf/index.php?topic=9140

Metalist

  • Newbie
  • *
  • Сообщений: 16
    • Просмотр профиля
Re:Как реализовать подсчет тактовых импульсов ?
« Ответ #2 : Декабрь 09, 2011, 13:43:57 »
Только что полазил по FC и по его справочнику, но нашел только: "Автоочистка сторожевого таймера" (Вид > Настройки проекта).

Taska

  • Hero Member
  • *****
  • Сообщений: 1801
    • Просмотр профиля
Re:Как реализовать подсчет тактовых импульсов ?
« Ответ #3 : Декабрь 09, 2011, 13:51:36 »
Когда разрешаешь прерывания по таймеру тау в свойствах выбираешь имточник тактирования или прескалер. При помощи стандарных макросов ФК, твою задачу не выполнить. Нужны вставики СИ-кода ил Асма.

Metalist

  • Newbie
  • *
  • Сообщений: 16
    • Просмотр профиля
Re:Как реализовать подсчет тактовых импульсов ?
« Ответ #4 : Декабрь 09, 2011, 14:19:03 »
Спасибо, теперь уже хоть что-то прояснилось. Ваша ссылка как раз то что нужно. Буду изучать. А вставки поручу своему брату программисту.

mim

  • Hero Member
  • *****
  • Сообщений: 2700
    • Просмотр профиля
Re:Как реализовать подсчет тактовых импульсов ?
« Ответ #5 : Декабрь 09, 2011, 15:58:47 »
Измерение такой длительность сигнала накладывает определенные трудности и требует особых способов решения задачи.
И поскольку звучит фраза "но подсчета самих "мкс" недостаточно для достижения нужной точности", я предполагаю что это имеет звучание как - "нужно измерить длительность микросекундных интервалов с точностью до десятых или до сотых долей микросекунды". Тогда это выглядит как 20,00...100,00 мкс.
При тактовой частоте МК в 16 Мгц разрешающая способность Таймера 1 равна 0,0625 мкс (шаг измерения 0,0625 мкс).
Таким образом Одна мкс равна 16 тикам таймера. Измерение импульса такой длительности нужно производить методом ЗАХВАТА ТАЙМЕРА.
Однако после захвата таймера нужно время на чтение значение захвата и переключение фронтов (захват по нарастающему, затем по ниспадающему фронту) в итоге нижний предел измерения не может быть равен единицам микросекунд. Другими словами нельзя мерять длительность меньше 1 мкс (а то и десяти, все зависит от обработчика прерывания).
Но если стоит задача, что предел измерения начинается от 20 мкс, то реально применить способ ЗАХВАТА ТАЙМЕРА.
Рекомендую почитать в инете "захват на avr", "измерение длительности импульса на avr", "AVR: таймеры/счетчики" ну и т.д. и т.п.

mim

  • Hero Member
  • *****
  • Сообщений: 2700
    • Просмотр профиля
Re:Как реализовать подсчет тактовых импульсов ?
« Ответ #6 : Декабрь 12, 2011, 08:53:17 »
Выходные прошли.
Какие есть достижения?
Тема интересная. В данной постановке (если постановка задачи верная) на форуме еще не решенная. Поэтому есть смысл напрячь мозги и выкатить решение (образно говоря, оно всего в трех строчках).

Taska

  • Hero Member
  • *****
  • Сообщений: 1801
    • Просмотр профиля
Re:Как реализовать подсчет тактовых импульсов ?
« Ответ #7 : Декабрь 12, 2011, 16:10:42 »
Выкладываю для затравки
 

mim

  • Hero Member
  • *****
  • Сообщений: 2700
    • Просмотр профиля
Re:Как реализовать подсчет тактовых импульсов ?
« Ответ #8 : Декабрь 12, 2011, 16:31:50 »
Макс, затравка хорошая. Подождем топикстартера.
Так что есть время тебе подумать, а то ты вечно спешишь (по ТЗ нужно измерять доли мкс).
Затравка для Макса.
 

Taska

  • Hero Member
  • *****
  • Сообщений: 1801
    • Просмотр профиля
Re:Как реализовать подсчет тактовых импульсов ?
« Ответ #9 : Декабрь 12, 2011, 20:15:50 »
Metalist пишет:
Цитировать
Есть входящий импульс длительностью 20...100мкс и нужно
вывести переменную максимально точно указывающую длительность импульса, но подсчета самих "мкс" недостаточно для достижения нужной точности. Собираюсь использовать Atmega8-16PU. Вопрос: можно ли реализовать подсчет тактовых импульсов самого МК или это получится только с отдельным тактовым генератором (не путать с внешним тактовым генератором МК) ? если да, то как это сделать или в какую сторону копать ?
Можно ли обойтись без вставок на Си и Асемблер ?



 Я так понял ТЗ меряем мкс и такты контроллера. По поводу десятых мкс завтра выложу проект на работе остался. "А чего там думать, прыгать надо"! :D)  Я просто такты делю на 16 и получаю мкс, а так прийдется добавить вычисление десятых.
 Но все же, где наш топикстартер?