Генератор импульсов 1 Гц - 1 МГц на Arduino Скетч программа для Ардуино 

Генератор импульсов 1 Гц - 1 МГц на Arduino Скетч программа для Ардуино 

***************************************************************

#include <TimerOne.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);// RS,E,D4,D5,D6,D7 (контакты, к которым подключен ЖК дисплей)
unsigned long t=1000,f,k=512;// по умолчанию период равен 1000 μs (1000 Hz), меандр, длительность импульса равна скважности k = 512 (50%)
byte k1,kn,kn1,kn2;
int drive,drive0;

void setup()

{
lcd.begin(16, 2);// LCD 16X2
pinMode(9, OUTPUT);
pinMode(6,INPUT);// button at input 6
pinMode(7,INPUT);// button at input 7
pinMode(13,INPUT);// button at input 13
}


void loop()

{
Timer1.initialize(t); // period
Timer1.pwm(9, k); // k - fill factor 0-1023 (скважность, коэффициент заполнения)
kn=digitalRead(6);// button input 6 (- pulse period) (уменьшить период)
kn1=digitalRead(7);// button input 7 (+ pulse period) (увеличить период)
kn2=digitalRead(13);// button input 13 (+ circle fill factor) (изменять скважность, по кругу)

if(kn==HIGH)

{ // уменьшаем период

drive++;

if(drive<30)

{
t=t-1;
}

// если кнопку удерживать в течение длительного времени, то к коррекции периода импульса будет применяться коэффициент x10 x100 x1000

else if(drive>30 && drive<60 )

{
t=t-10;
}

else if(drive>=60 && drive<100)

{
t=t-100;
}

else if(drive>=100)

{
t=t-1000;
}

}

else

{
drive=0;
}

if(kn1==HIGH)

{// увеличиваем период

drive0++;

if(drive0<30)

{
t=t+1;
// если кнопку удерживать в течение длительного времени, то к коррекции периода импульса будет применяться коэффициент x10 x100 x1000
}

else if(drive0>30 && drive0<60 )

{
t=t+10;
}

else if(drive0>=60 && drive0<100)

{
t=t+100;
}

else if(drive0>=100)

{
t=t+1000;
}

}

else

{
drive0=0;
}

if(t==0 || t>300000)

{ //ограничиваем минимальную длительность импульса, если 0 μs или больше чем 300 ms (3.33 Hz), то период делаем равным 1 μs
t=1;
}

if(t>200000 && t<300000)

{ // ограничиваем максимальную длительность импульса, если больше чем 200 ms, но меньше чем 300 ms (3.33 Hz), то период делаем равным 200 ms (5 Hz)
t=200000;
}

f=1000000/t; // рассчитываем частоту
k1=k*100/1024; // рассчитываем скважность

if(kn2==HIGH)

{// кнопка для регулировки скважности (по кругу от 50 до 100%, затем от 0 до 100%)
k=k+16;// шаг для настройки скважности 16, до 1024 (вы можете сделать шаг 8 для более гладкой настройки)
}

if(k==1024)

{
k=0;
}

// отображение информации на ЖК дисплее
lcd.setCursor(0,0);
lcd.print("T=");
lcd.print(t);
lcd.print(" us");
lcd.setCursor(12,0);
lcd.print(k1);
lcd.print(" %");
lcd.setCursor(0,1);
lcd.print("F=");
lcd.print(f);
lcd.print(" Hz");
delay(300);
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(" ");
}

***************************************************************

You have no rights to post comments