Частотомер на attiny2313: Самый простой частотомер до 10 МГц на микроконтроллере Attiny2313 – Частотомер на микроконтроллере ATtiny2313 – Радиодед

Схема и описание работы частотомера на микроконтроллере AVR ATtiny2313

В данной статье представлена простая и надежная схема частотомера, реализованная на основе микроконтроллера ATtiny2313 (семейство AVR). С ее помощью можно измерять частоты до 65 кГц включительно. Программа для микроконтроллера написана на BascomAVR – нечасто уже используется, но может быть кто то его еще юзает, поэтому, надеюсь, кому то еще эта схема пригодится. В дальнейшем уже буду публиковать схемы с использованием более современных программно-аппаратных схем.

Отображение частоты производится на дисплее 16*2, но обязательно с контроллером HD44780 или аналогичным KS066.. Для питания прибора подойдет напряжение от 5 до 9 вольт.

Схема частотомера на микроконтроллере ATtiny2313

Подсчет числа импульсов производится при помощи подсчитывания импульсов по нарастающему фронту на ноге 9 микроконтроллера (PD.5/T1 и вход таймера Timer1). Два диода 1N4148 и резистор на 10 кОм необходимы для защиты входа от перенапряжения.

Для работы схемы у микроконтроллера необходимо прошить fuse bits, чтобы задействовать режим работы с внешним кварцевым резонатором (данная операция уже много где в сети описана, поэтому здесь не будем отвлекаться на это).

Текст программы написан на бэйсике в среде BascomAVR. Демо версия этой программы имеет ограничение по размеру кода в 4 Кб, но этого нам вполне хватает. Скачать BascomAVR можно с официального сайта ее разработчика — www.mcselec.com. В программе задействованы 2 таймера: таймер0 служит для отсчета фиксированных интервалов времени (в рассматриваемом нами случае 1 секунда, можно изменять), а таймер1 осуществляет подсчет импульсов, пришедших за это время.

Необходимо отметить, что подсчет числа импульсов будет производиться только в том случае, если уровень сигнала на контакте 9 будет равен уровню логической «1» (примерно 3-5 вольт). Timer0 работает на дефолтной частоте (то есть которая установлена в нем по умолчанию) микроконтроллера ATtiny2313, равной 8 МГц, делитель тактовой частоты не используется. Чтобы увеличить верхний предел измерения частоты (65 кГц) необходимо использовать внешний кварц с большей тактовой частотой и немного изменить прошивку.

Внешний вид частотомера на микроконтроллере ATtiny2313

Частотомер можно сконструировать на макетной плате. В качестве перспектив на доработку устройства можно добавить распознавание диапазонов частоты и отображение ее в виде  Гц, кГц, МГц. Скачать программу для этой схемы можно по нижеприведенной ссылке.

Внешний вид частотомера на микроконтроллере ATtiny2313

  Frequency (14,0 KiB, 126 hits)

Внешний вид частотомера на микроконтроллере ATtiny2313 Загрузка… 355 просмотров

Самодельный частотомер на ATTINY2313 | Уголок радиолюбителя

Этот самодельный частотомер на ATTINY2313 предназначен для измерения частоты в диапазоне примерно от 4МГц до более 160МГц. Его можно использовать как измеритель частот или в качестве устройства ввода-вывода TRX, например, на диапазон 144МГц (2м).

Технические характеристики частотомера:

  • измерение частоты в диапазоне 4-160 Мгц
  • отображение измерений на ЖК-дисплее
  • чувствительность 700мВ
  • входное напряжение, макс < 30В
  • питание: 8-15В
  • очень простая плата, минимальное количество
    элементов, быстрый запуск
  • размеры платы: 37х80мм

Схема прекрасно отработала в диапазоне от 3,8МГц до 162МГц. Основой схемы является микроконтроллер ATTINY2313. Его преимуществом является возможность работать на частотах до 20МГц. В схеме использован кварц на 16МГц, таким образом, сам процессор теоретически должен правильно измерять частоты до 8МГц.

Зачастую оказывается, что диапазон до 8МГц слишком мал. Увеличение верхнего диапазона можно получить, используя делитель частоты (прескалер). В схеме задействован прескалер LB3500, который позволяет измерять до 150 Мгц.

Краткая информация о LB3500:

  • напряжение питания — 4,5…5,5В
  • потребляемый ток — l6мА-24мА
  • входное напряжение — 100мВ-600мВ
  • выходное напряжение — 0,9 Vpp
  • делитель — 8

Без применения дополнительного делителя схема способна измерять частоты до 64МГц. Добавление дополнительного делителя в виде двоичного счетчика 74LS293 (ICl) позволяет увеличить диапазон измерений до 150 Мгц (макс. для LB3500).

ICl делит частоту на 4. Таким образом, вся система прескалера (ICl и IC4) делит входную частоту на 32. Транзистор Tl с элементами C7, R2, R3 обеспечивает высокое входное сопротивление.

Входной сигнал после разделения попадает на вход микросхемы LB3500. На выходе в 9 IC4 сигнал получается в 8 раз меньшей частоты, чем на входе. К сожалению, выходной сигнал микросхемы LB3500 не согласовывается с TTL уровнями. Для устранения этого недостатка в схему добавлен транзистор Т2, который предназначен для согласования. Потенциометр PRI обеспечивает точное соответствие.

С выхода QB счетчика IC1 сигнал попадает на вход счетчика Tl микросхемы IC2. Программа микроконтроллера вычисляет частоту этого сигнала, умножает ее на 32 и результат измерения поступает на ЖК-дисплей.

Печатная плата и прошивка (211,1 KiB, скачано: 355)

Радиосхемы. — Частотомер на микроконтроллере ATtiny2313

материалы в категории

Частотомер на микроконтроллере ATtiny2313

Частотомер на микроконтроллере ATtiny2313. Схема отличается простотой и надежностью. Частотомер позволяет измерять частоты до 65 кГц. Программа для микроконтроллера написана на BascomAVR. Отображение частоты на дисплее 16*2. Напряжение питания устройства от 5 до 9 вольт.

Счет импульсов происходит путем подсчитывания импульсов по нарастающему фронту на ноге 9 (PD.5/T1 и вход таймера Timer1). Для защиты входа от перенапряжения включены два диода 1N4148 и резистор на 10кОм.  Отображение происходит на любой дисплей 16*2 , но обязательно с  контроллером HD44780 или аналогичным KS066.


 

Программа написана на бэйсике в среде BascomAVR.  Демо версия имеет ограничение по размеру кода в 4 Кб, чего вполне достаточно. Скачать BascomAVR с официального сайта разработчика. В программе используются два таймера: таймер0 для отсчета фиксированных интервалов времени, в нашем случае 1 секунда( можно поэкспериментировать с этим значением), а таймер1 считает пришедшие импульсы за это время. Стоит отметить, что счет импульсов будет вестись только в том случае, если уровень сигнала на ноге 9 будет соответствовать уровню лог. «1» (порядка 3-5 вольт). Timer0 работает на частоте тактирования микроконтроллера т.е 8МГц, делитель тактовой частоты не включён.

 

Частотомер можно собрать на макетной плате.

Исходник и прошивка- во вложении.

 

Вложения к странице
ФайлОписаниеРазмер файла:
freq.rar 14 Кб

Радиосхемы. — Частотомер на микроконтроллере ATtiny2313

материалы в категории

Частотомер на микроконтроллере ATtiny2313

Частотомер на микроконтроллере ATtiny2313. Схема отличается простотой и надежностью. Частотомер позволяет измерять частоты до 65 кГц. Программа для микроконтроллера написана на BascomAVR. Отображение частоты на дисплее 16*2. Напряжение питания устройства от 5 до 9 вольт.

Счет импульсов происходит путем подсчитывания импульсов по нарастающему фронту на ноге 9 (PD.5/T1 и вход таймера Timer1). Для защиты входа от перенапряжения включены два диода 1N4148 и резистор на 10кОм.  Отображение происходит на любой дисплей 16*2 , но обязательно с  контроллером HD44780 или аналогичным KS066.


 

Программа написана на бэйсике в среде BascomAVR.  Демо версия имеет ограничение по размеру кода в 4 Кб, чего вполне достаточно. Скачать BascomAVR с официального сайта разработчика. В программе используются два таймера: таймер0 для отсчета фиксированных интервалов времени, в нашем случае 1 секунда( можно поэкспериментировать с этим значением), а таймер1 считает пришедшие импульсы за это время. Стоит отметить, что счет импульсов будет вестись только в том случае, если уровень сигнала на ноге 9 будет соответствовать уровню лог. «1» (порядка 3-5 вольт). Timer0 работает на частоте тактирования микроконтроллера т.е 8МГц, делитель тактовой частоты не включён.

 

Частотомер можно собрать на макетной плате.

Исходник и прошивка- во вложении.

 

Вложения к странице
ФайлОписаниеРазмер файла:
freq.rar 14 Кб

Частотомер на микроконтроллере — chipenable.ru

  В одной из предыдущих статей, посвященных изучению микроконтроллеров AVR, на примере проекта частотомера мы рассмотрели использование 16-ти разрядного таймера/счетчика Т1 и прерывания по событию захват. В качестве дополнения к этому материалу, предлагаю улучшенную версию частотомера. В этом проекте тоже используется блок захвата и дополнительно еще задействован тактовый вход 8-ми разрядного таймера. 

    Недостатки старого проекта заключались в маленьком диапазоне измеряемых частот (~сотни киллогерц), что было связано со способом измерения периода сигнала. 

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

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

   В новом проекте вычисление частоты выполняется по нескольким периодам входного сигнала и без постоянного использования прерывания по событию захват. Это уменьшает накладные расходы микроконтроллера и позволяет измерять значительно большие частоты — в идеале до 1/2 Fcpu (частоты тактирования микроконтроллера). 

   Итак, перейдем к описанию нового проекта частотомера. 


   Входной сигнал подается на вход схемы захвата таймера Т1 и счетный вход таймера Т0. Для того чтобы таймер Т0 тактировался от внешнего сигнала, он должен быть соответствующим образом настроен.  

   Проект состоит из 4-ех программных модулей. 

bcd.c – содержит функцию  для вывода двоичных чисел на дисплей 

timer.c – содержит функцию инициализации таймеров T0 и Т1, обработчики прерываний, функцию захвата значений счетных регистров таймеров и программных счетчиков и, наконец, функцию вычисления частоты. 

lcd_lib.c – это библиотека для работы с символьным дисплеем.

main.c —  основная программа.

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

   Для подсчета количества импульсов измеряемого сигнала используется счетный вход аппаратного таймера. В качестве опорного сигнала используется тактовый сигнал микроконтроллера.   

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

   Формула для расчета частоты по методу временных ворот такая:

 

Fx = Fo * (M/N),

 

где Fx – частота входного сигнала, Fo – частота опорного сигнала, M – количество импульсов входного сигнала за время измерения, N – количество импульсов опорного сигнала за время измерения.

     В проекте используются два таймера — 8-ми разрядный таймер/счетчик Т0 и 16-ти разрядный Т1. Таймер T1 подсчитывает количество тактовых импульсов микроконтроллера (baseImp), укладывающихся в определенный временной интервал, а таймер Т0 считает импульсы измеряемого сигнала (mesurImp).

   Временной интервал, в течение которого выполняются подсчеты импульсов, порядка одной секунды. Поскольку за это время оба таймера успевают много раз переполнится, в программе используются дополнительные программные счетчики (timer0, timer1). Это 16-ти разрядные переменные, которые  инкрементируются в прерываниях таймеров Т0 и Т1. 

    Общий вид циклограммы работы таймеров представлен на рисунке ниже. Циклограмма работы таймеров Т0 и Т1

 

Алгоритм программы выглядит следующим образом.

 

1. Выполняется инициализация таймеров и дисплея

2. Микроконтроллер ожидает установки флага схемы захвата таймера Т1, или, выражаясь простым языком, ловит передний фронт измеряемого сигнала. 

3. Дождавшись установки флага (момент Capture1 на рисунке), микроконтроллер сохраняет значения счетных регистров таймеров Т0 и Т1, а также значения программных счетчиков. 

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

5. По окончанию задержки микроконтроллер ожидает установки флага схемы захвата 

6. Дождавшись установки флага (момент Capture2 на рисунке), микроконтроллер сохраняет значения счетных регистров Т0 и Т1 и значения программных счетчиков. 

7. Вычисляется значение частоты и выводится на дисплей 

8. Возврат на шаг номер 2.

 

   Несколько слов о вычислении частоты. 

 Для расчета количества  импульсов опорного сигнала используется следующая формула. 

 

  //количество переполнений программного счетчика

  saveTimer12 = saveTimer12 – saveTimer11;

 

  //количество импульсов опорного сигнала

  baseImp = (icr12 + (unsigned long)saveTimer12*65536) – icr11;

 

где  saveTimer12, saveTimer11 — значение программного счетчика timer1 в моменты Capture2, Capture1 соответственно;   icr12,  icr12 — значение счетного регистра TCNT1 таймера Т1 в моменты Capture2, Capture1 соответственно; 65536 — емкость счетчика Т1

     

   Расчет количества импульсов входного сигнала выполняется по аналогичной формуле, только там емкость счетчика равна 256.

 

  saveTimer02 = saveTimer02 — saveTimer01;

  mesurImp = (tcnt02 + (unsigned  long)saveTimer02*256) — tcnt01;

 

   Расчет частоты входного сигнала производится по формуле:

 

  result = (16000000UL*(unsigned long long)mesurImp*10)/baseImp;

 

где 16000000 — тактовая частота микроконтроллера, а mesurImp и baseImp количество импульсов входного и опорного сигналов соответственно.

   Результат умножается на 10 для отображения одного знака после запятой. 

   

   Переменные  baseImp,  mesurImp и  result типа unsigned long. Для избежания переполнения переменных при выполнении операций умножения,  переменные приводятся к типам более высокой разрядности (unsigned long в первых двух формулах и unsigned long long в последней).  

 

PS: С проектами для WinAVR и CodeVison у меня возникли некоторые проблемы. И  WinAVR и CodeVison неадекватно вели себя при использовании типа unsigned long long в формуле вычисления частоты. Не было времени разбираться в чем дело и я немного упростил формулу, пожертвовав точностью вычислений.

Отправить ответ

avatar
  Подписаться  
Уведомление о