Перейти к содержанию

Воссоздание алгоритма LAC-3.035 Средствами ардуино


Рекомендуемые сообщения

Всем доброго времени суток. На работе случилась беда, навернулся котел, точнее программно-таймерное устройство, дергающее за "веревочки" цепей данного котла. Как у нас в стране обычно бывает, нет ни документации на это устройство,  ни описания логики данного механизма. Ну и соответственно вся возня, касаемая ремонта, легла на плечи коллектива. Недолго думая, обложился всем схемами, которые мог найти, частично методом частичного разбора и замеров расчертил полную схему данного котла. Постепенно логика работы сломанного программно-таймерного устройства стала понятна. Было принято решение воссоздать данный модуль на базе AVR контроллера со всеми вытекающими. В спринт лайот накидал печатку, заказал, и пока она доставляется занялся набором программы в среде Arduino IDE. И буквально с первых же попыток написать скетч понял, что с печатками я поторопился,  как я уже потом понял, программно-таймерное устройство c момента запуска должно единожды прогнать перечень команд в void setup и начать следить да датчиками уже в void loop. Следовательно для такого исполнения программы понадобилось дополнять схему парой транзисторов и реле, для коммутации питания ардуино самой на себя.

Ну что-то я в дебри полез. Нужен совет по скетчу. Дабы оставить печатные платы без изменений в первоначальном заказанном виде, хочу избавиться от удерживающего питание реле. Но это получится сделать только если есть возможность в void setup скинуть скетч на начало работы при определенных условиях, но только не средствами reset, а именно программно? Чтото вроде того, что при начале скетча, при несоблюдении условий продолжения работы  void setup начинал выполняться с первой строки. Ниже часть пока еще сырого пробного скетча.

#include <OLED_I2C.h>
OLED  myOLED(4, 3, 4);
extern uint8_t RusFont[];
extern uint8_t SmallFont[];
const int buttonPinSTART = A0;                     // вход для контроля пуск/стоп программы (так же через диод запитывается пин +5v, на который приходит питание через реле, управляемого 13 пином)
const int buttonPinFIRE  = A1;                     // вход для контроля пламени
const int ledPin2 = 2;                             // пин питания дисплея
const int ledPin5 = 5;                             // вывод для реле вентилятора
const int ledPin6 = 6;                             // вывод для реле аварии
const int ledPin7 = 7;                             // вывод для реле воздушной заслонки
const int ledPin8 = 8;                             // вывод для реле соленоид2
const int ledPin9 = 9;                             // вывод для реле розжига
const int ledPin10 = 10;                           // вывод для реле соленоид1
const int ledPin13 = 13;                           // вывод подтяжки питания
int buttonStateSTART = LOW;
int buttonStateFIRE = HIGH;

void setup() {
  pinMode(buttonPinSTART, INPUT);
  pinMode(buttonPinFIRE, INPUT_PULLUP);
  pinMode(ledPin2, OUTPUT);                        // Пин питания дисплея
  pinMode(ledPin5, OUTPUT);                        // Пин управления 
  pinMode(ledPin6, OUTPUT);                        // Пин управления
  pinMode(ledPin7, OUTPUT);                        // Пин управления
  pinMode(ledPin8, OUTPUT);                        // Пин управления
  pinMode(ledPin9, OUTPUT);                        // Пин управления
  pinMode(ledPin10, OUTPUT);                       // Пин управления
  pinMode(ledPin13, OUTPUT);                       // Пин удержания питания микроконтроллера
  digitalWrite(ledPin2,  HIGH);                    // Подклюаем дисплей
  delay(1500);
  myOLED.begin();
  myOLED.clrScr();                                 // Стираем все с экрана
  myOLED.setFont(RusFont);                         // Инициализируем русский шрифт
  myOLED.print( "------" , CENTER, 12);      // Выводим текст ------
  myOLED.print( "------" , CENTER, 30);           // Выводим текст ------
  myOLED.print( "------" , RIGHT, 48);              // Выводим текст ------
  myOLED.update();
  digitalWrite(ledPin13,  HIGH);                   // Подтягиваем питание ардуино через реле
  delay (2000);
  buttonStateSTART = digitalRead(buttonPinSTART);
  if (buttonStateSTART == LOW) {
    myOLED.clrScr();
    myOLED.print( "JNVTYF PFGECRF" , CENTER, 24);    // Выводим текст ОТМЕНА ЗАПУСКА
    myOLED.update();
    delay(1000);
    myOLED.print( "DSRK>XTYBT" , CENTER, 36);        // Выводим текст ВЫКЛЮЧЕНИЕ
    myOLED.update();
    delay(1000);
    digitalWrite(ledPin13, LOW);
    delay(300);
  }
  myOLED.clrScr();
  myOLED.print( "GJLUJNJDRF R GECRE" , CENTER, 24);  // Выводим текст ПОДГОТОВКА К ПУСКУ
  myOLED.update();
  delay(2000);
  buttonStateSTART = digitalRead(buttonPinSTART);
  if (buttonStateSTART == LOW) {
    myOLED.clrScr();
    myOLED.print( "JNVTYF PFGECRF" , CENTER, 24);    // Выводим текст ОТМЕНА ЗАПУСКА
    myOLED.update();
    delay(1000);
    myOLED.print( "DSRK>XTYBT" , CENTER, 36);        // Выводим текст ВЫКЛЮЧЕНИЕ
    myOLED.update();
    delay(1000);
    digitalWrite(ledPin13, LOW);
    delay(300);
  }
  myOLED.clrScr();
  myOLED.print( "------" , CENTER, 24);  // Выводим текст 
  myOLED.print( "------" , CENTER, 36);            // Выводим текст 
  myOLED.update();
  delay(1000);
  buttonStateSTART = digitalRead(buttonPinSTART);
  if (buttonStateSTART == LOW) {
    myOLED.clrScr();
    myOLED.print( "JNVTYF PFGECRF" , CENTER, 24);    // Выводим текст ОТМЕНА ЗАПУСКА
    myOLED.update();
    delay(1000);
    myOLED.print( "DSRK>XTYBT" , CENTER, 36);        // Выводим текст ВЫКЛЮЧЕНИЕ
    myOLED.update();
    delay(1000);
    digitalWrite(ledPin13, LOW);
    delay(300);
  }
  digitalWrite(ledPin7,  HIGH);
  myOLED.clrScr();
  myOLED.print( "------" , CENTER, 24);  // Выводим текст
  myOLED.update();
  delay(1000);
  buttonStateSTART = digitalRead(buttonPinSTART);
  if (buttonStateSTART == LOW) {
    myOLED.clrScr();
    myOLED.print( "JNVTYF PFGECRF" , CENTER, 24);    // Выводим текст ОТМЕНА ЗАПУСКА
    myOLED.update();
    delay(1000);
    myOLED.print( "DSRK>XTYBT" , CENTER, 36);        // Выводим текст ВЫКЛЮЧЕНИЕ
    myOLED.update();
    digitalWrite(ledPin7, LOW);
    delay(1000);
    digitalWrite(ledPin13, LOW);
    delay(300);
  }
  digitalWrite(ledPin5,  HIGH);
  delay(300);
  .....
  .....
  .....
  .....
  .....
  }
}

void loop() {
  .....
  .....
  .....
  .....
  .....
  }

В данном варианте, при отмене запуска ардуинка проделывает кое какие манипуляции, в зависимости от части кода и снимает питание с пина13 (реле поддержки питания), которое тем временем обестачивает контроллер. Вроде бы задача выполнена, но есть баг. К примеру механик решил выключить котел, повернул тумблер в *0* на стадии предпускового продува камеры, пошел цикл завершения работы. А механик передумал останавливать котел, не дождался пока завершится процесс выключения, врубает тумблер в "работу", при этом в void setup программа отключает подтяжку питания, но продолжает выполнять последовательность действий запуска. В конечном итоге сработает авария, условия которой прописано в void loop. Но момент все равно неприятный. Есть ли возможность в данной строке

    delay(1000);
    digitalWrite(ledPin13, LOW);
    delay(300);

вписать команду, которая заставит  void setup прервать выполнение программы и вернуться к началу (повторюсь, без reset), ну и соответственно избавиться от использования 13 пина и соответственно танцев с подтягиванием питания

Написал много, так как тяжело выразить словами всю кашу, которая на данный момент у меня в голове, возможно и сам за выходные немного отдохну и решение придет само собой) Возможно я изначально неправильно выбрал подход к данному скетчу. Не представляю как в  void loop это все заставить работать, так как основному телу программы не нужна цикличность. 

Изменено пользователем Dan Smith
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

3 часа назад, Dan Smith сказал:

вписать команду, которая заставит  void setup прервать выполнение программы и вернуться к началу

напишите:

goto <начальный адрес памяти программ>

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

<начальный адрес памяти программ> равен нулю на АВР-ах насколько я помню.

Изменено пользователем ruhi
дополнил

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Спасибо всем откликнувшимся, все получилось с помощью

void(* resetFunc) (void) = 0;

Избавился от лишней обвязки, теперь все работает как надо, но пока еще на столе. Если у кому нибудь будет интересна данная работа, то после получения печаток, сборки контроллера и обкатки на котле, могу выложить весь проект от начала до конца. Так что пишите, за мной не заржавеет. Единственное, надобно размер скетча немного уменьшить, на это есть еще почти месяц) Буду вечерами самообразовываться)

 

4 часа назад, ruhi сказал:

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

Еше раз спасибо.... У меня нет выбора, заменить устройство нечем, так как оно сконструировано и собрано в 70х годах. Устала деталька работать, так как является механическим программным устройством. Как понимаете там даже танцы с бубном не помогут)

Изменено пользователем Dan Smith
Ссылка на комментарий
Поделиться на другие сайты

6 часов назад, Dan Smith сказал:

все получилось с помощью

а я уж забыл что в goto нельзя метку произвольную написать! Докопаться до указателя на функцию - это уже очень высокая компетенция, удачи!

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

Никак не хотел чем-то зацепить и огорчить, Ваш ответ сподвиг читать про команду "goto", чтобы понять как это работает и с чем ее готовить, попутно нашел еще несколько примеров подобной команды и все их попробовал, остановился на функции, которую и оставил в своем скетче. Тупо использовать Вашу подсказку - не научиться ничему, а так почитал, и что-то запомнил. Так что не поймите не правильно, еще раз Вам спасибо за совет, направление мне дали, а дальше уже пошло поехало)

Ссылка на комментарий
Поделиться на другие сайты

27.02.2021 в 06:41, Dan Smith сказал:

Никак не хотел чем-то зацепить и огорчить,

да я расстроился только по поводу собственного склероза и/или невнимательности! Коментарий у меня получился корявый в своей неоднозначности :), но рассматривайте его исключительно с положительной по отношению к вам стороны! Я действительно удивлен встретить на этом форуме человека который способен самостоятельно и по делу(!) разобраться с применением указателя на функцию!

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

Ну вот не хватает мне знаний в программировании контроллера, но остановиться на полпути я не могу. Нужна помощь :( . Суть проблемы такова, Скетч написал, на столе все работает, алгоритм работы в норме. Но скетч получился почти на 600 строк. Очень много повторяющихся блоков, которые мне посоветовали упростить в цикле for. Я бы рад попробовать, но открывая скетч,не могу понять даже с чего начинать) Происки информации по работе for еще больше закидывают меня в замешательство. 

Вот полный скетч...

Скрытый текст

#include <OLED_I2C.h>
OLED  myOLED(4, 3, 4);
extern uint8_t RusFont[];
extern uint8_t SmallFont[];
const int buttonPinSTART = A0;                     // вход для контроля пуск/стоп программы
const int buttonPinFIRE  = A1;                     // вход для контроля пламени
const int ledPin2 = 2;                             // пин питания дисплея
const int ledPin5 = 5;                             // вывод для реле вентилятора
const int ledPin6 = 6;                             // вывод для реле аварии
const int ledPin7 = 7;                             // вывод для реле воздушной заслонки
const int ledPin8 = 8;                             // вывод для реле соленоид2
const int ledPin9 = 9;                             // вывод для реле розжига
const int ledPin10 = 10;                           // вывод для реле соленоид1
const int ledPin13 = 13;                           // вывод поморгать)
int buttonStateSTART = LOW;
int buttonStateFIRE = HIGH;
void(* resetFunc) (void) = 0;                      // объявляем функцию reset с адресом 0

void setup() {
  pinMode(buttonPinSTART, INPUT_PULLUP);
  pinMode(buttonPinFIRE, INPUT);
  pinMode(ledPin2, OUTPUT);                        // пин питания дисплея
  pinMode(ledPin5, OUTPUT);                        // Пин управления вентилятором форсунки
  pinMode(ledPin6, OUTPUT);                        // Пин сигнала аварии по исвчезновению факела
  pinMode(ledPin7, OUTPUT);                        // Пин управления воздушной заслонкой
  pinMode(ledPin8, OUTPUT);                        // Пин управления соленоидом второй форсунки
  pinMode(ledPin9, OUTPUT);                        // Пин управления транформатором розжига пламени
  pinMode(ledPin10, OUTPUT);                       // Пин управления соленоидом первой форсунки
  pinMode(ledPin13, OUTPUT);                       // Контроль по диоду на ардуинке
  digitalWrite(ledPin2,  HIGH);                    // Подклюаем дисплей
  digitalWrite(ledPin6,  LOW);                     // Отключаем ревун
  myOLED.begin();
  myOLED.setFont(RusFont);                         // Инициализируем русский шрифт
  buttonStateSTART = digitalRead(buttonPinSTART);
  if (buttonStateSTART == HIGH) {
  digitalWrite(ledPin13,  HIGH);      
  delay(500);   
  digitalWrite(ledPin13,  LOW);   
  delay(500);
  resetFunc();                                     //Вызываем reset
  }
  buttonStateSTART = digitalRead(buttonPinSTART);
  if (buttonStateSTART == HIGH) {
    myOLED.clrScr();
    myOLED.print( "JNVTYF PFGECRF" , CENTER, 24);    // Выводим текст ОТМЕНА ЗАПУСКА
    myOLED.update();
    delay(1000);
    myOLED.print( "DSRK>XTYBT" , CENTER, 36);        // Выводим текст ВЫКЛЮЧЕНИЕ
    myOLED.update();
    delay(1000);
    resetFunc();                                     //Вызываем reset
    delay(300);
  }
  myOLED.clrScr();
  myOLED.print( "-----" , CENTER, 12);           // Выводим текст 
  myOLED.print( "-----" , CENTER, 30);           // Выводим текст 
  myOLED.print( "-----" , RIGHT, 48);            // Выводим текст 
  myOLED.update();
  delay(2000);
  myOLED.clrScr();
  myOLED.print( "GJLUJNJDRF R GECRE" , CENTER, 24);  // Выводим текст ПОДГОТОВКА К ПУСКУ
  myOLED.update();
  delay(1000);
  buttonStateSTART = digitalRead(buttonPinSTART);
  if (buttonStateSTART == HIGH) {
    myOLED.clrScr();
    myOLED.print( "JNVTYF PFGECRF" , CENTER, 24);    // Выводим текст ОТМЕНА ЗАПУСКА
    myOLED.update();
    delay(1000);
    myOLED.print( "DSRK>XTYBT" , CENTER, 36);        // Выводим текст ВЫКЛЮЧЕНИЕ
    myOLED.update();
    delay(1000);
    resetFunc();                                     //Вызываем reset
    delay(300);
  }
  myOLED.clrScr();
  myOLED.print( "JNRHSNBT DJPLEIYJQ" , CENTER, 24);  // Выводим текст ОТКРЫТИЕ ВОЗДУШНОЙ
  myOLED.print( "PFCKJYRB" , CENTER, 36);            // Выводим текст ЗАСЛОНКИ
  myOLED.update();
  delay(1000);
  buttonStateSTART = digitalRead(buttonPinSTART);
  if (buttonStateSTART == HIGH) {
    myOLED.clrScr();
    myOLED.print( "JNVTYF PFGECRF" , CENTER, 24);    // Выводим текст ОТМЕНА ЗАПУСКА
    myOLED.update();
    delay(1000);
    myOLED.print( "DSRK>XTYBT" , CENTER, 36);        // Выводим текст ВЫКЛЮЧЕНИЕ
    myOLED.update();
    delay(1000);
    resetFunc();                                     //Вызываем reset
    delay(300);
  }
  digitalWrite(ledPin7,  HIGH);
  myOLED.clrScr();
  myOLED.print( "PFGECR DTYNBKZNJHF" , CENTER, 24);  // Выводим текст ЗАПУСК ВЕНТИЛЯТОРА
  myOLED.update();
  delay(1000);
  buttonStateSTART = digitalRead(buttonPinSTART);
  if (buttonStateSTART == HIGH) {
    myOLED.clrScr();
    myOLED.print( "JNVTYF PFGECRF" , CENTER, 24);    // Выводим текст ОТМЕНА ЗАПУСКА
    myOLED.update();
    delay(1000);
    myOLED.print( "DSRK>XTYBT" , CENTER, 36);        // Выводим текст ВЫКЛЮЧЕНИЕ
    myOLED.update();
    digitalWrite(ledPin7, LOW);
    delay(1000);
    resetFunc();                                     //Вызываем reset
    delay(300);
  }
  digitalWrite(ledPin5,  HIGH);
  delay(300);
  myOLED.clrScr();
  myOLED.print( "GHJLEDRF RFVTHS" , CENTER, 12);      // Выводим текст ПРОДУВКА КАМЕРЫ
  myOLED.print( "J:BLFYBT HJP:BUF" , CENTER, 24);     // Выводим текст ОЖИДАНИЕ РОЗЖИГА
  myOLED.print( "XTHTP" , CENTER, 36);                // Выводим текст ЧЕРЕЗ
  myOLED.print( "-15-" , CENTER, 48);                 // Выводим текст -15-
  myOLED.update();
  delay(1000);
  myOLED.print( "-14-" , CENTER, 48);// Выводим текст -14-
  myOLED.update();
  delay(1000);
  myOLED.print( "-13-" , CENTER, 48);// Выводим текст -13-
  myOLED.update();
  delay(1000);
  myOLED.print( "-12-" , CENTER, 48);// Выводим текст -12-
  myOLED.update();
  delay(1000);
  myOLED.print( "-11-" , CENTER, 48);// Выводим текст -11-
  myOLED.update();
  delay(1000);
  myOLED.print( "-10-" , CENTER, 48);// Выводим текст -10-
  myOLED.update();
  delay(1000);
  myOLED.print( "-09-" , CENTER, 48);// Выводим текст -09-
  myOLED.update();
  delay(1000);
  myOLED.print( "-08-" , CENTER, 48);// Выводим текст -08-
  myOLED.update();
  delay(1000);
  myOLED.print( "-07-" , CENTER, 48);// Выводим текст -07-
  myOLED.update();
  delay(1000);
  myOLED.print( "-06-" , CENTER, 48);// Выводим текст -06-
  myOLED.update();
  delay(1000);
  myOLED.print( "-05-" , CENTER, 48);// Выводим текст -05-
  myOLED.update();
  delay(1000);
  myOLED.print( "-04-" , CENTER, 48);// Выводим текст -04-
  myOLED.update();
  delay(1000);
  myOLED.print( "-03-" , CENTER, 48);// Выводим текст -03-
  myOLED.update();
  delay(1000);
  myOLED.print( "-02-" , CENTER, 48);// Выводим текст -02-
  myOLED.update();
  delay(1000);
  myOLED.print( "-01-" , CENTER, 48);// Выводим текст -01-
  myOLED.update();
  delay(1000);
  buttonStateSTART = digitalRead(buttonPinSTART);
  if (buttonStateSTART == HIGH) {
    myOLED.clrScr();
    myOLED.print( "JNVTYF PFGECRF" , CENTER, 24);    // Выводим текст ОТМЕНА ЗАПУСКА
    myOLED.update();
    digitalWrite(ledPin5, LOW);
    delay(1000);
    myOLED.print( "DSRK>XTYBT" , CENTER, 36);        // Выводим текст ВЫКЛЮЧЕНИЕ
    myOLED.update();
    digitalWrite(ledPin7, LOW);
    delay(1000);
    resetFunc();                                     //Вызываем reset
    delay(300);
  }
  digitalWrite(ledPin9,  HIGH);                      // включение тр-р розжига
  myOLED.clrScr();
  myOLED.print( "HJP:BU" , CENTER, 12);              // Выводим текст РОЗЖИГ
  myOLED.print( "PFGECR AJHCEYRB 1" , CENTER, 24);   // Выводим текст ЗАПУСК ФОРСУНКИ 1
  myOLED.print( "XTHTP" , CENTER, 36);               // Выводим текст ЧЕРЕЗ
  myOLED.print( "-3-" , CENTER, 48);                 // Выводим текст -3-
  myOLED.update();
  delay(1000);
  myOLED.print( "-2-" , CENTER, 48);                 // Выводим текст -2-
  myOLED.update();
  delay(1000);
  myOLED.print( "-1-" , CENTER, 48);                 // Выводим текст -1-
  myOLED.update();
  delay(1000);
  buttonStateSTART = digitalRead(buttonPinSTART);
  if (buttonStateSTART == HIGH) {
    myOLED.clrScr();
    myOLED.print( "JNVTYF PFGECRF" , CENTER, 24);    // Выводим текст ОТМЕНА ЗАПУСКА
    myOLED.update();
    delay(1000);
    myOLED.print( "DSRK>XTYBT" , CENTER, 36);        // Выводим текст ВЫКЛЮЧЕНИЕ
    myOLED.update();
    digitalWrite(ledPin9, LOW);
    digitalWrite(ledPin5, LOW);
    delay(2000);
    digitalWrite(ledPin7, LOW);
    delay(1000);
    resetFunc();                                     //Вызываем reset
    delay(300);
  }
  digitalWrite(ledPin10,  HIGH);                     // включение соленоида 1й форсунки
  myOLED.clrScr();
  myOLED.print( "HF<JNF AJHCEYRB 1" , CENTER, 12);   // Выводим текст  РАБОТА фОРСУНКИ 1
  myOLED.print( "RJYNHJKM AFRTKF" , CENTER, 24);     // Выводим КОНТРОЛЬ ФАКЕЛА
  myOLED.print( "XTHTP" , CENTER, 36);               // Выводим текст ЧЕРЕЗ
  myOLED.print( "-5-" , CENTER, 48);                 // Выводим текст -5-
  myOLED.update();
  delay(1000);
  myOLED.print( "-4-" , CENTER, 48);// Выводим текст -4-
  myOLED.update();
  delay(1000);
  myOLED.print( "-3-" , CENTER, 48);// Выводим текст -3-
  myOLED.update();
  delay(1000);
  digitalWrite(ledPin9,  LOW);                        // выключение тр-р розжига
  myOLED.print( "-2-" , CENTER, 48);// Выводим текст -2-
  myOLED.update();
  delay(1000);
  myOLED.print( "-1-" , CENTER, 48);// Выводим текст -1-
  myOLED.update();
  delay(1000);
  buttonStateSTART = digitalRead(buttonPinSTART);
  if (buttonStateSTART == HIGH) {
    myOLED.clrScr();
    myOLED.print( "JNVTYF PFGECRF" , CENTER, 24);    // Выводим текст ОТМЕНА ЗАПУСКА
    myOLED.update();
    digitalWrite(ledPin10, LOW);
    delay(1000);
    myOLED.clrScr();
    myOLED.print( "GHJLEDRF RFVTHS" , CENTER, 12);    // Выводим текст ПРОДУВКА КАМЕРЫ
    myOLED.print( "DSRK>XTYBT" , CENTER, 24);         // Выводим текст ВЫКЛЮЧЕНИЕ
    myOLED.print( "XTHTP" , CENTER, 36);              // Выводим текст ЧЕРЕЗ
    myOLED.print( "-15-" , CENTER, 48);               // Выводим текст -15-
    myOLED.update();
    delay(1000);
    myOLED.print( "-14-" , CENTER, 48);// Выводим текст -14-
    myOLED.update();
    delay(1000);
    myOLED.print( "-13-" , CENTER, 48);// Выводим текст -13-
    myOLED.update();
    delay(1000);
    myOLED.print( "-12-" , CENTER, 48);// Выводим текст -12-
    myOLED.update();
    delay(1000);
    myOLED.print( "-11-" , CENTER, 48);// Выводим текст -11-
    myOLED.update();
    delay(1000);
    myOLED.print( "-10-" , CENTER, 48);// Выводим текст -10-
    myOLED.update();
    delay(1000);
    myOLED.print( "-09-" , CENTER, 48);// Выводим текст -09-
    myOLED.update();
    delay(1000);
    myOLED.print( "-08-" , CENTER, 48);// Выводим текст -08-
    myOLED.update();
    delay(1000);
    myOLED.print( "-07-" , CENTER, 48);// Выводим текст -07-
    myOLED.update();
    delay(1000);
    myOLED.print( "-06-" , CENTER, 48);// Выводим текст -06-
    myOLED.update();
    delay(1000);
    myOLED.print( "-05-" , CENTER, 48);// Выводим текст -05-
    myOLED.update();
    delay(1000);
    myOLED.print( "-04-" , CENTER, 48);// Выводим текст -04-
    myOLED.update();
    delay(1000);
    myOLED.print( "-03-" , CENTER, 48);// Выводим текст -03-
    myOLED.update();
    delay(1000);
    digitalWrite(ledPin5, LOW);
    myOLED.print( "-02-" , CENTER, 48);// Выводим текст -02-
    myOLED.update();
    delay(1000);
    myOLED.print( "-01-" , CENTER, 48);// Выводим текст -01-
    myOLED.update();
    digitalWrite(ledPin7, LOW);
    delay(1000);
    myOLED.print( "----" , CENTER, 48);
    myOLED.update();
    delay(1000);
    resetFunc();                                     //Вызываем reset
    delay(300);
  }
}

void loop() {
  buttonStateSTART = digitalRead(buttonPinSTART);
  buttonStateFIRE = digitalRead(buttonPinFIRE);
  if (buttonStateSTART == LOW && buttonStateFIRE == HIGH) {
    digitalWrite(ledPin8,  HIGH);
    myOLED.clrScr();
    myOLED.print( "RJNTK DDTLTY" , CENTER, 12);         // Выводим текст КОТЕЛ ВВЕДЕН
    myOLED.print( "AJHCEYRF 2 UJNJDF" , CENTER, 24);    // Выводим текст фОРСУНКА 2 ГОТОВА  
    myOLED.print( "R PFGECRE" , CENTER, 36);            // Выводим текст К ЗАПУСКУ
    myOLED.update();
    delay(3000);
  }
  if (buttonStateSTART == HIGH && buttonStateFIRE == HIGH) {
    digitalWrite(ledPin8,  LOW);
    digitalWrite(ledPin10,  LOW);
    myOLED.clrScr();
    myOLED.print( "GHJLEDRF RFVTHS" , CENTER, 12);      // Выводим текст ПРОДУВКА КАМЕРЫ
    myOLED.print( "DSRK>XTYBT" , CENTER, 24);           // Выводим текст ВЫКЛЮЧЕНИЕ
    myOLED.print( "XTHTP" , CENTER, 36);                // Выводим текст ЧЕРЕЗ
    myOLED.print( "-15-" , CENTER, 48);                 // Выводим текст -15-
    myOLED.update();
    delay(1000);
    myOLED.print( "-14-" , CENTER, 48);// Выводим текст -14-
    myOLED.update();
    delay(1000);
    myOLED.print( "-13-" , CENTER, 48);// Выводим текст -13-
    myOLED.update();
    delay(1000);
    myOLED.print( "-12-" , CENTER, 48);// Выводим текст -12-
    myOLED.update();
    delay(1000);
    myOLED.print( "-11-" , CENTER, 48);// Выводим текст -11-
    myOLED.update();
    delay(1000);
    myOLED.print( "-10-" , CENTER, 48);// Выводим текст -10-
    myOLED.update();
    delay(1000);
    myOLED.print( "-09-" , CENTER, 48);// Выводим текст -09-
    myOLED.update();
    delay(1000);
    myOLED.print( "-08-" , CENTER, 48);// Выводим текст -08-
    myOLED.update();
    delay(1000);
    myOLED.print( "-07-" , CENTER, 48);// Выводим текст -07-
    myOLED.update();
    delay(1000);
    myOLED.print( "-06-" , CENTER, 48);// Выводим текст -06-
    myOLED.update();
    delay(1000);
    myOLED.print( "-05-" , CENTER, 48);// Выводим текст -05-
    myOLED.update();
    delay(1000);
    myOLED.print( "-04-" , CENTER, 48);// Выводим текст -04-
    myOLED.update();
    delay(1000);
    myOLED.print( "-03-" , CENTER, 48);// Выводим текст -03-
    myOLED.update();
    delay(1000);
    digitalWrite(ledPin5, LOW);
    myOLED.print( "-02-" , CENTER, 48);// Выводим текст -02-
    myOLED.update();
    delay(1000);
    myOLED.print( "-01-" , CENTER, 48);// Выводим текст -01-
    myOLED.update();
    digitalWrite(ledPin7, LOW);
    delay(1000);
    myOLED.print( "----" , CENTER, 48);
    myOLED.update();
    delay(700);
    resetFunc();                                     //Вызываем reset
    delay(300);
  }
  if (buttonStateFIRE == LOW) {
    digitalWrite(ledPin6,  HIGH);
    digitalWrite(ledPin8,  LOW);
    digitalWrite(ledPin10,  LOW);
    myOLED.clrScr();
    myOLED.print( "FDFHBQYJT JNRK>XTYBT" , CENTER, 24); // Выводим текст АВАРИЙНОЕ ОТКЛЮЧЕНИЕ
    myOLED.print( "GJNE{ AFRTK" , CENTER, 12);          // Выводим текст ПОТУХ ФАКЕЛ
    myOLED.print( "GHJLEDRF RFVTHS" , CENTER, 36);      // Выводим текст ПРОДУВКА КАМЕРЫ
    myOLED.print( "-30-" , CENTER, 48);                 // Выводим текст -30-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.print( "-29-" , CENTER, 48);// Выводим текст -29-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.print( "-28-" , CENTER, 48);// Выводим текст -28-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.print( "-27-" , CENTER, 48);// Выводим текст -27-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.print( "-26-" , CENTER, 48);// Выводим текст -26-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.print( "-25-" , CENTER, 48);// Выводим текст -25-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.print( "-24-" , CENTER, 48);// Выводим текст -24-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.print( "-23-" , CENTER, 48);// Выводим текст -23-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.print( "-22-" , CENTER, 48);// Выводим текст -22-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.print( "-21-" , CENTER, 48);// Выводим текст -21-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.print( "-20-" , CENTER, 48);// Выводим текст -20-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.print( "-19-" , CENTER, 48);// Выводим текст -19-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.print( "-18-" , CENTER, 48);// Выводим текст -18-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.print( "-17-" , CENTER, 48);// Выводим текст -17-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.print( "-16-" , CENTER, 48);// Выводим текст -16-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.print( "-15-" , CENTER, 48);// Выводим текст -15-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.print( "-14-" , CENTER, 48);// Выводим текст -14-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.print( "-13-" , CENTER, 48);// Выводим текст -13-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.print( "-12-" , CENTER, 48);// Выводим текст -12-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.print( "-11-" , CENTER, 48);// Выводим текст -11-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.print( "-10-" , CENTER, 48);// Выводим текст -10-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.print( "-09-" , CENTER, 48);// Выводим текст -09-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.print( "-08-" , CENTER, 48);// Выводим текст -08-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.print( "-07-" , CENTER, 48);// Выводим текст -07-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.print( "-06-" , CENTER, 48);// Выводим текст -06-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.print( "-05-" , CENTER, 48);// Выводим текст -05-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.print( "-04-" , CENTER, 48);// Выводим текст -04-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.print( "-03-" , CENTER, 48);// Выводим текст -03-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    digitalWrite(ledPin5, LOW);
    myOLED.print( "-02-" , CENTER, 48);// Выводим текст -02-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.print( "-01-" , CENTER, 48);// Выводим текст -01-
    myOLED.update();
    digitalWrite(ledPin7, LOW);
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }
    myOLED.clrScr();
    myOLED.print( "RJNTK PF<KJRBHJDFY" , CENTER, 12); // Выводим текст КОТЕЛ ЗАБЛОКИРОВАН 
    myOLED.print( "NHT<ETNCZ" , CENTER, 24);          // Выводим текст ТРЕБУЕТСЯ  
    myOLED.print( "GTHTPFGECR" , CENTER, 36);         // Выводим текст ПЕРЕЗАПУСК
    myOLED.print( "NEV<KTHJV HF1" , CENTER, 48);      // Выводим текст ТУМБЛЕРОМ РВ1
    myOLED.update();
    digitalWrite(ledPin6, LOW);
    delay(1000);
    for(;;);
  }
}

 

Блоки, которые отсчитывают секунды, аж глаза режут. Добрые люди, как упростить, не изменяя функциональности скетча?.

Я уже на финишной прямой, но конкректно забуксовал(

Если можно то хоть примерчик скиньте как реализовать.

Изменено пользователем Alex
Убрал код под спойлер
Ссылка на комментарий
Поделиться на другие сайты

Вам, по сути, только вот эту строку переделать для цикла :

myOLED.print( "-29-" , CENTER, 48);

Остальное всё - одно и тоже, повторяющееся.
И запихиваем этот маленький кусок кода в цикл.

Посмотрите, может ли класс OLED работать с числами.

 

PS: Я настоятельно Вам рекомендую бросить эту затею и заставить руководство приобрести лицензированную автоматику. Поверьте мне, как КИПовцу с 20-тилетнем стажем, газовые котлы - страшная штука. А в условиях даже небольших помех, ваша "автоматика" обязательно будет сбоить. И дай Бог, чтобы она сбойнула в нужную сторону :(

Ссылка на комментарий
Поделиться на другие сайты

15 часов назад, Alex сказал:

Вам, по сути, только вот эту строку переделать для цикла :


myOLED.print( "-29-" , CENTER, 48);

Остальное всё - одно и тоже, повторяющееся.
И запихиваем этот маленький кусок кода в цикл.

Посмотрите, может ли класс OLED работать с числами.

 

PS: Я настоятельно Вам рекомендую бросить эту затею и заставить руководство приобрести лицензированную автоматику. Поверьте мне, как КИПовцу с 20-тилетнем стажем, газовые котлы - страшная штука. А в условиях даже небольших помех, ваша "автоматика" обязательно будет сбоить. И дай Бог, чтобы она сбойнула в нужную сторону :(

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

Изменено пользователем Dan Smith
Ссылка на комментарий
Поделиться на другие сайты

2 hours ago, Dan Smith said:

котел не газовый, на салярке, большая часть защиты реализована вне данного блока,

Нет разницы. Откажет какая-то часть защиты вне данного блока и... Угадайте, кто сидеть будет, когда на пожарище подгоревшую ардуину найдут?

Ссылка на комментарий
Поделиться на другие сайты

Не хотелось бы переводить тему в подобное рассуждение)) Я все прекрасно понимаю, но когда начальство "любит" в хвост и гриву, тут остается либо лишаться рабочего места, либо выкручиваться всеми подручными способами. Задача в данный момент стоит не в эксплуатации котла, а в предъявлении его в рабочем состоянии для "галочки". И надеюсь все понимают, что в нашей стране всё всегда так делалось и делается. Повторюсь, что данный блок - это временное решение, дотянуть до сервисного ремонта. Да и сам лет 20 работаю с системами автоматики, и не такое видел)

Ссылка на комментарий
Поделиться на другие сайты

7 часов назад, Alex сказал:

Это посмотрели ?

Доброго дня, к компьютеру не дорваться, работы понавалилось.  По Вашему вопросу затрудняюсь ответить, так как не до конца понимаю суть вопроса. Если Вы имели ввиду (может ли он проводить вычисления своими ресурсами?,то наврятли.) Использовал такой вот распространенный дисплей. По крайней мере числа то он выводит, как и текст

 

oled-i2c-display-1-3-inch-128x64px-4-1-720x720.jpg

Изменено пользователем Dan Smith
Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

Всем спасибо. Тихим сапом разобрался) 

0e77fac53627.jpg
 

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

Ссылка на комментарий
Поделиться на другие сайты

14 часов назад, Dan Smith сказал:

... 4х слойного текстолита.. Без него никак.

Серьезно? 6 релюшек, трансформатор, буратина и дисплей - надо 4 слоя?

Не маловато?

Я уж молчу про ответственный узел на буратине, которая непонятно как себя поведет в суровых условиях...

Ссылка на комментарий
Поделиться на другие сайты

24 минуты назад, LiVit сказал:

Не маловато?

В том и дело, между двумя слоями спрятать слаботочку, так же ардуино распаять на плате и спрятать под экран...

Ссылка на комментарий
Поделиться на другие сайты

5 часов назад, Dan Smith сказал:

В том и дело, между двумя слоями спрятать слаботочку

т.е., наружние слои будут земляными, а внутренние сигнальными?
Это что-то новенькое.
Нет, я видел такое, но для сигналов 1,8В, никак не 5.
Я не отговариваю - развлекайтесь, ваше право.

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...
12.03.2021 в 03:16, _abk_ сказал:

Угадайте, кто сидеть будет, когда на пожарище подгоревшую ардуину найдут?

Директор сядет. С наёмного работника спроса никакого - если, конечно, в его должностные обязанности не входит надзор за котлом, и если своё творчество он делал по поручению руководства. Директор отвечает за всё.

Изменено пользователем Огонёк
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

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

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Все предложенные к рассмотрению источники питания работают примерно по одному принципу: сетевое напряжение выпрямляется, фильтруется (получаем чуть больше 300 вольт постоянного), затем преобразуется снова в переменное, но уже на частотах в несколько десятков килогерц, понижается на трансформаторе и снова выпрямляется. За счёт высокой частоты преобразования используется трансформатор на ферритовом, а не на стальном, сердечнике, гораздо меньших габаритов и стоимости. Минусы: значительное усложнение схемы блока и вероятность возникновения различных помех от него. Модули управления (кроме первого) также являются импульными преобразователями, с теми же достоинствами и недостатками. Если нужно по быстрому собрать некое подобие ЛБП, то уж лучше брать модуль вроде этого. Ну и блок питания к нему соответствующий. Но не очень понятно, какой практический опыт можно получить от соединения готовых модулей парой проводов.  
    • У меня больше всего вопросов вызвала необычная схема обеспечения отрицательного питания. Автор этой обстоятельной заметки пишет: For this supply to work correctly, the transformer must have a secondary voltage of at least 18V RMS.  Почему? Что будет не так с отрицательным питанием, если напряжение на трансформаторе будет меньше 18В?   https://tinyurl.com/23mlwxtt - я в простейшей эмуляции ставлю 12В пикового напряжения для трансформатора и на стабилитроне все как положено: -5.6В.
    • Согласен, очень криво объяснил. Это работа трёх вольтовой линии, просто на диод шотки сдвоенный, на один анод приходит сигнал напрямую с трансформатора, а на второй через дроссель. Вольт/деление 5 вольт в клетке, тайминг по моему 10 МС. Третья фотография это сигнал на катодах уровень земли ровно по центру экрана. Но все линии по итогу в порядке 3.3 в, 5, в, 12 в и -12 в. Нагрузить все линии не могу сразу ,так как тут же выгорают транзисторы (имеется нагрузка 250 ватт по 10 ампер на каждую линию за исключением-12в), поэтому нагружаю 3.3 вольтовую линию на 10 ампер,  подключаю переменный резистор 50 ватт на 15 ом на 5 вольтовую линию и постепенно довожу до той той картины с перекосом (это гдето  50 ватт общее). По поводу микросхемы, вверху имеется скрин где между импульсами проскакивает мини импульс, если так можно сказать, он проскакивает и на одной  и на второй ноге (7,8). Микросхема не tl 494, а lw4933/abx942.1/c9421646. Далее они приходят на базы транзисторов 945g  коллекторы этих транзисторов соединены с  выводами трансформатора. Просто схема типовая, легче мне кажется просто привести фото самого блока, для тех кто разбирается будет гораздо информативне.  Диод шотки по 12 вольтовой линии был подгоревший, заменил на донора. Приводить скрины не буду что бы не захламлять тему. В итоге, пока все так же, при достижении определенной нагрузки суммарно где-то 50 ватт, появляется этот "выброс и перекос". По этому имеются мысли на два варианта, это микросхема , этот мини импульс между периодами, на низкой нагрузке особо не влияет, но при достижении определенной приводит с самовозбуждению входной цепи и непроизвольному открытию транзистора нижнего плеча. Либо дело в "горячей части", плавающий дефект в обвязке силовых ключей.  Спасибо за ответ.
    • @Gomerchik а вы контролировали как меняется уровень сигнала на А1 ардуины?
    • Спасибо за совет. Автором данного проекта я не являюсь, мне нужно было воссоздать уличный датчик для метеостанции взамен пропавшего(( Из разного найденного в интернете этот проект работает с моей станцией Орегон (спасибо автору). В понедельник попробую последовать Вашему совету. Но все равно куча непоняток  как блин это работает)) Если дело в неправильной отправки команды, то как на это влияет подключение датчика температуры? Если совсем не подключать таймер, то передача идет один раз (как и прописано в программе), станция принимает и отображает, но минут через сколько-то естественно станция уже ни чего не показывает, но с таймером питание полностью не пропадает с ардуинки, но передача сигнала каким-то образом работает по таймеру.  В моем понимании данная команда подается один раз потому, что таймер должен отключать питание МК после передачи сигнала и каждые 43 сек снова подавать питание (так того требует станция).  Ардуино передает показания температуры отключается полностью и 43 секунды мк не работает.  Сейчас у меня питание пока сделано на подпитке от солнечной батареи, но пару пасмурных дней и аккумулятор съедается до отключения(
    • thickman Так и сделаю. Вытащу из бу БП.  Буду знать, как отличить. Благодарю. Заменил транзисторы на IRFB20N50K. Картина стала, совсем другой.  Похоже трудность не в драйвере, на момент подвозбуда, переходные процессы, в нем, завершены. Увеличил затворные резисторы до 50ом, стало немного лучше.  Не понятно, почему верхний ключ греется несколько сильнее. Возможно, стоит посмотреть ток в коллекторе.  Снабберные емкости временно удалил, изменений не произошло.  Замена ТГР на другой, на кольце MSTN-16A-TH, так же, результата не принесла.   irfb20n50k.pdf
×
×
  • Создать...