#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);
int regim = 1;
int flag = 0;
int val = 100;
int dead = 10;
void setup() {
lcd.init();
lcd.backlight();
DDRB |= _BV(PB1) | _BV(PB2); /* set pins as outputs */
TCCR1A = _BV(COM1A1) | _BV(COM1B1) /* non-inverting PWM */
| _BV(WGM11); /* mode 14: fast PWM, TOP=ICR1 */
TCCR1B = _BV(WGM13) | _BV(WGM12)
| _BV(CS10); /* no prescaling */
TCCR1A = (TCCR1A & 0x0F) | 0xB0; // set pin 10 inverted
}
void loop()
{
if (digitalRead(14) == HIGH && flag == 0) //если кнопка нажата
// и перемення flag равна 0 , то ...
{
regim++;
flag = 1;
if (regim > 10) //ограничение кол. режимов-нам и этих хатает
{
regim = 1; // переключать циклично
}
}
if (digitalRead(14) == LOW && flag == 1) //если кнопка НЕ нажата
//и переменная flag равна - 1 ,то ...
{
flag = 0; //обнуляем переменную "knopka"
}
if (regim == 1) //первый режим
{
ICR1 = 3200; //задаем частоту 5КГЦ
OCR1A = 2133; //задаем девиацию 90% на 9пине
OCR1B = 213; //задаем девиацию 10% на 10пине
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("5 Khz");
}
if (regim == 2) //второй режим
{
ICR1 = 1066; //задаем частоту 10КГЦ
OCR1A = 600; //задаем девиацию 90% на 9пине
OCR1B = 108; //задаем девиацию 10% на 10пине
analogWrite(9, val - dead);
analogWrite(10, val + dead);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("10 Khz");
}
if (regim == 3) //третий режим
{
ICR1 = 800; //задаем частоту 20КГЦ
OCR1A = 533; //задаем девиацию 90% на 9пине
OCR1B = 53; //задаем девиацию 10% на 10пине
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("20 Khz");
}
if (regim == 4) //четвертый режим
{
ICR1 = 400; //задаем частоту 40КГЦ
OCR1A = 267; //задаем девиацию 90% на 9пине
OCR1B = 27; //задаем девиацию 10% на 10пине
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("40 Khz");
}
if (regim == 5) //пятый режим
{
ICR1 = 266; //задаем частоту 60КГЦ
OCR1A = 177; //задаем девиацию 90% на 9пине
OCR1B = 17; //задаем девиацию 10% на 10пине
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("60 Khz");
}
if (regim == 6) //шестой режим
{
ICR1 = 200; //задаем частоту 80КГЦ
OCR1A = 137; //задаем девиацию 90% на 9пине
OCR1B = 14; //задаем девиацию 10% на 10пине
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("80 Khz");
}
if (regim == 7) //седьмой режим
{
ICR1 = 160; //задаем частоту 100КГЦ
OCR1A = 133; //задаем девиацию 90% на 9пине
OCR1B = 13; //задаем девиацию 10% на 10пине
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("100Khz");
}
if (regim == 8) //восьмой режим
{
ICR1 = 106; //задаем частоту 150КГЦ
OCR1A = 97; //задаем девиацию 90% на 9пине
OCR1B = 10; //задаем девиацию 10% на 10пине
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("150Khz");
}
if (regim == 9) //девятый режим
{
ICR1 = 80; //задаем частоту 200КГЦ
OCR1A = 72; //задаем девиацию 90% на 9пине
OCR1B = 7; //задаем девиацию 10% на 10пине
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("200Khz");
}
if (regim == 10) //десятый режим
{
ICR1 = 53; //задаем частоту 300КГЦ
OCR1A = 35; //задаем девиацию 90% на 9пине
OCR1B = 3; //задаем девиацию 10% на 10пине
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("300Khz");
}
delay(100);
}
Прощу подсказать как ввести dead time в этот скетч. пробовал вставить в один из диапазонов…
analogWrite(9, val - dead);
analogWrite(10, val + dead);
бесполезно. очевидно, где-то как-то в регистрах надо что-то подправлять