| Ваш IP: 18.232.147.215 | Online(67) - гости: 8, боты: 59 | Загрузка сервера: 2.37 ::::::::::::

Частотомер 6.5 МГц (Arduino)

Библиотека FreqCount, позволяет на своей основе создать довольно точный частотомер, с разными интервалами времени измерения. Так же небольшая коррекция файла библиотеки позволяет откалибровать частотомер.

На рисунке показана схема частотомера, помимо платы Arduino и одной кнопки, частотомер содержит усилитель-формирователь, который позволяет измерять частоту как импульсного, так и синусоидального сигнала. Максимальная частота которую может измерять частотомер 6,5 МГц, так же доступно три интервала времени измерения — 0.1, 1 и 10  секунд.

#include <FreqCount.h>//https://github.com/PaulStoffregen/FreqCount/archive/master.zip
#include <LiquidCrystal.h>
// вход частотомера 5 
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);// RS,E,D4,D5,D6,D7
void setup() {
  lcd.begin(16, 2);// LCD 16X2
  pinMode(3,INPUT);
  FreqCount.begin(1000);
}
unsigned long f;float f0;
int x,n=3,r;

void loop() {
  
  if(digitalRead(3)==HIGH){n++;x=0;delay(100);}
    lcd.setCursor(0,1);
  if(n==1){x++;if(x==1){FreqCount.begin(100);}r=-1;lcd.print("T = 0.1 s ");}
  if(n==2){x++;if(x==1){FreqCount.begin(10000);}r=1;lcd.print("T = 10 s ");}
  if(n==3){x++;if(x==1){FreqCount.begin(1000);}r=0;lcd.print("T = 1 s  ");}
  if(n>3){n=1;} 
    lcd.setCursor(0,0);
    lcd.print("F = ");
  if(f>=1000000 && n==3){f0=f/1000000.0;lcd.print(f0,6+r);lcd.print(" MHz");}
  if(f<1000000 && n==3){f0=f/1000.0;lcd.print(f0,3+r);lcd.print(" kHz");}
  if(f>=100000 && n==1){f0=f/100000.0;lcd.print(f0,6+r);lcd.print(" MHz");}
  if(f<100000 && n==1){f0=f/100.0;lcd.print(f0,3+r);lcd.print(" kHz");}
  if(f>=10000000 && n==2){f0=f/10000000.0;lcd.print(f0,6+r);lcd.print("MHz");}
  if(f<10000000 && n==2){f0=f/10000.0;lcd.print(f0,3+r);lcd.print(" kHz");}

  if (FreqCount.available()) { 
   
    f = FreqCount.read(); 
    
   lcd.setCursor(10,1);lcd.print("***");
  }
   delay(200);
   lcd.clear();
}

/*
Корректировка частотомера 
***************************************************************
В папке библиотек Arduino найти библиотеку FreqCount, 
в файле FreqCount.cpp найдите строки:
#if defined(TIMER_USE_TIMER2) && F_CPU == 12000000L
    float correct = count_output * 0.996155;
и заменить их на:
#if defined(TIMER_USE_TIMER2) && F_CPU == 16000000L
    float correct = count_output * 1.000000; 
где 1.000000 - Ваш поправочный коэффициент
корректировку нужно проводить подав на вход частотомера 1 МГц
После изминений файла загрузите по новой скетч в плату Arduino
***************************************************************
*/

 

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

#include <LedControl.h>//https://github.com/wayoda/LedControl/archive/master.zip
#include <FreqCount.h>//https://github.com/PaulStoffregen/FreqCount/archive/master.zip
LedControl lc = LedControl(12,11,10,1);// DIN(12), CLK(11), CS(10)
 
void setup() {
  lc.shutdown(0, false);
  FreqCount.begin(1000);
  lc.clearDisplay(0); 
  lc.setIntensity(0,8); // яркость 0-15
 
unsigned long f;
byte fq[8],pd=false;
 
void loop() {
 
  if (FreqCount.available()) {f = FreqCount.read(); }
  lc.setRow(0,7,0x47);
  fq[6]= f/1000000%10;
  fq[5]= f/100000%10;
  fq[4]= f/10000%10;
  fq[3]= f/1000%10;
  fq[2]= f/100%10;
  fq[1]= f/10%10;
  fq[0]= f%10%10;
  for(int i = 0;i < 7;i++){
  lc.setDigit(0,i,fq[i],pd);
  }
}

Добавить комментарий

Войти с помощью: 

Случайные статьи

  • УСИЛИТЕЛЬ НЧ НА ЧЕТЫРЕХ ТРАНЗИСТОРАХ

    На рис. а) изображена схема усилителя НЧ на четырех транзисторах. Оконечные транзисторы V5 и V6 в нем — германиевые средней мощности, что позволяет получить при сопротивлении нагрузки 8 Ом и напряжении питания 9 В номинальную мощность до 0,7 Вт. При повышении напряжения питания до 12 В выходная мощность достигает 1,5 …Подробнее...
  • Часы на КР145ИК1901 с индикаторами на светодиодах

    Схема часов на светодиодных индикаторах показана на рисунке. Управления производится на кнопках Т(время) К(коррекция) Ч(часы) М(минуты). Тактовая частота задается кв. резонатором Q1. Сигналы с сегментных выходов КР145ИК1901 — A-G поступают на входы транзисторов VT1-VT7, в коллекторной цепи которых включены светодиодные матрицы состоящей из индикаторов Н1-Н4, а вывод питания 14 используется …Подробнее...
  • ACS712 — датчик тока (Arduino)

    ACS712 — датчик тока (Arduino)

    Датчик ACS712 позволяет измерить постоянный и переменный ток, с достаточно большой точностью (погрешность измерения не более 1,5%), так же падение напряжение на датчике тока очень незначительное, так как сопротивление токопроводящей цепи не более 1,2 мОм. Датчик тока ACS712 выпускается на номиналы в ±5, ±10 и ±30 А, с чувствительностью 185 …Подробнее...
  • Автоматический выключатель освещения (12В)

    Автоматический выключатель освещения включает или выключает исполнительный элемент (реле) в зависимости от освещения. На рисунке показаны две схемы для положительной и отрицательной полярности напряжения питания. Уровень освещенности при котором срабатывает уст-во регулируется потенциометром Р1. Печатная плата одинаково подходит для разно полярных схем. Источник — http://electroschematics.comПодробнее...
  • EEPROM — работа с энергонезависимой памятью (Arduino)

    EEPROM — работа с энергонезависимой памятью (Arduino)

    Arduino UNO и NANO содержат 1024 байт EEPROM – энергонезависимой памяти, в которой можно хранить данные, которые будут доступны после отключения питания. В Arduino IDE по умолчанию уже имеется библиотека EEPROM которая позволяет проводить операции с энергонезависимой памятью. Память EEPROM обладает гарантированным жизненным циклом 100 000 операций записи/стирания. Время затраченное на одну операцию …Подробнее...