Четверг, 05.12.2024, 15:15
Радиосервис - ИЗМАИЛ

Меню сайта

Статистика
Форма входа
Друзья сайта

Форум поддержки программ "Tiny Tools" (CPLD/USB-S/USB-F/USB-SPI EJTAG Tiny Tools)

Электроника на KitPost
Поиск
Наш опрос
Оцените мой сайт
1. Отлично
2. Хорошо
3. Неплохо
4. Ужасно
5. Плохо
Всего ответов: 86
Ссылки по uCoz
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
    Модератор форума: mvm_ksaa  
    ИК станция от mvm_ksaa
    mvm_ksaa
    Дата: Пятница, 24.11.2017, 13:33 | Сообщение # 1        
    Подполковник
    Группа: Модераторы
    Сообщений: 173
    Статус: Offline

    Проект закрыт, не совсем закончен, автор не дорабатывает, воспроизводить проект можете на своё усмотрение.

    Инфракрасная паяльная станция на Arduino Uno + AD7705, управляется через программу с компьютера


    Шилд в формате Sprint-Layout60 можно скачать здесь https://cloud.mail.ru/public/Eg3v/43qzcV7aT
    Скетч для Arduino можно скачать здесь https://cloud.mail.ru/public/2Q35/koTjzpLiG
    Скачать программу для Windows X32 можно здесь https://cloud.mail.ru/public/6SmE/pvpzzb2kS
    Скачать программу для Windows X64 можно здесь https://cloud.mail.ru/public/MBeG/ybAQNX7n6
    Скетч для Arduino-Pro-Mini для управления вентилятором охлаждения https://cloud.mail.ru/public/ESKm/68cN4assT

    Шилд от Cinema: https://cloud.mail.ru/public/ByGm/BbFr4VUQV
    Версия программы с корректировкой температур и увеличенным графиком https://cloud.mail.ru/public/LVi1/PS3rs9qvJ
    В версии программы 2.2.1 добавлена возможность для работы с USB микроскопом

    Программа IRSolder64X скачать
    Программа IRSolder32X скачать
    Ссылки которые публиковались походу обсуждений в теме могут не сработать, просьба брать отсюда!!!


    Сообщение отредактировал mvm_ksaa - Вторник, 14.08.2018, 05:29
     

    virs-1
    Дата: Суббота, 22.02.2020, 22:14 | Сообщение # 181        
    Рядовой
    Группа: Пользователи
    Сообщений: 3
    Статус: Offline

    mvm_ksaa, не могу скачать скечь ошибка 404 и можно схему

    Добавлено (22.02.2020, 22:16)
    ---------------------------------------------
    mvm_ksaa, а лучше полный архив схема прошивка программа пичятка

     

    Cinema
    Дата: Воскресенье, 23.02.2020, 12:46 | Сообщение # 182        
    Генерал-майор
    Группа: Проверенные
    Сообщений: 618
    Статус: Offline

    virs-1
    Смотрите! Я специально для Вас собрал Золотые цитаты от mvm_ksaa из этой его темы:
    "..., схемы я вообще не рисовал, ну думаю по этому и так все понятно, схема силового, один в один от LDZ, на силовой модуль от остальной схемы приходят только управляющие сигналы на оптосимисторы. Печатку под ЛУТ, она односторонняя, я выкладываю, вот есть только нюансик, я на печатках никогда не рисую расположение элементов, вот не нужно как-то мне, по фотографии блока изнутри видно что и как расположено, тем более там всего 14 деталей))) Для тех кто не помнит или не может найти схему от LDZ, я тоже приведу ее здесь и выделю что относится к силовому блоку" (http://radioservice.at.ua/forum/27-34-2774-16-1511761149)
    "Печатка силового блока, я ее уже выкладывал на форуме по станции от LDZ, но выложу ещё раз для полноты описания" (http://radioservice.at.ua/forum/27-34-2775-16-1511761397)
    "сама электроника питается от компьютера по USB,..., как видно из фотографии внутренностей, в правом верхнем углу стоит самая обычная Arduino Uno, сверху у нее в виде шилда стоит  АЦП AD7705 со всей обвязкой, схема как и у поста atmega128+ad7705 один в один, она кстати точна такая же как и в даташите на эту микросхему, плюсом во время отладки я поставил дублирующие светодиоды UART, через сопротивления 1кОм, светодиоды параллельно оптосимисторам силового блока ..., ... 2 светодиода на отдельные порты, вывод порта i2c вместе с питанием, ну и поставил пищалку, печатная платка получилось простой, односторонней под ЛУТ. Схему подключения АЦП и печатку выкладываю" (http://radioservice.at.ua/forum/27-34-2780-16-1511765759)
    "Так как я не рисую расположение элементов на печатной плате" (http://radioservice.at.ua/forum/27-34-2781-16-1511767929) и (http://radioservice.at.ua/forum/27-34-2782-16-1511768567)
    "а вентилятор то)))" (http://radioservice.at.ua/forum/27-34-2790-16-1511779494) и (http://radioservice.at.ua/forum/27-34-2791-16-1511779857)
    "последнее время что-то времени ужасно не хватает, ... в свободное время немножко софтину переписываю"
    (http://radioservice.at.ua/forum/27-34-3143-16-1524731690) это про мой пост # 89 (http://radioservice.at.ua/forum/27-34-3123-16-1524511308) и добавка от Alexandr_ # 92(http://radioservice.at.ua/forum/27-34-3145-16-1524733976)
    "вначале питал от USB, питания явно недостаточно, переделал на внешнее питание" (http://radioservice.at.ua/forum/27-34-3359-16-1533530622)
    от меня лично: "Скетч от mvm_ksaa MyWorkStation" (http://radioservice.at.ua/forum/27-34-3808-16-1547550854) Теперь у вас есть всё. Нарисуйте полную схему, в BOM-лист добавьте типы и марки используемых компонентов, напишите инструкцию пользователя для данного схемно-программного комплекса. А то как-то требованием ваш пост прикидывается, а не желанием разобраться и навести порядок в теме.

    "Опыт — это то, что получаешь, не получив того, что хотел" © интернет
     

    virs-1
    Дата: Четверг, 19.03.2020, 23:30 | Сообщение # 183        
    Рядовой
    Группа: Пользователи
    Сообщений: 3
    Статус: Offline

    на контактах 5 и 6 ноль
     

    mvm_ksaa
    Дата: Пятница, 20.03.2020, 06:28 | Сообщение # 184        
    Подполковник
    Группа: Модераторы
    Сообщений: 173
    Статус: Offline

    virs-1, т.е. светодиоды тоже не моргают? а светодиоды на 2 и 3 выводах загораются? а RX TX моргают? тут просто куча вариантов, коннект проходит? температура при этом возвращается в программу? просто так я не могу ответить, почему нет выхода на оптроны!
     

    Cinema
    Дата: Воскресенье, 27.09.2020, 18:16 | Сообщение # 185        
    Генерал-майор
    Группа: Проверенные
    Сообщений: 618
    Статус: Offline

    Без малого 3 года (от 11.2017г) этой связке arduino+PC. Хочу пройтись по этой разработке вопросами, попытаться разобраться более углублённо. Для начала задам вопрос по библиотеке для AD7705! Были проблемы у skayp606 из-за библиотек дисплея и AD7705:
    

    С дисплеем быстро разобрались, а АЦП, я так понял, остался непобежденным. Я тогда оставил "на потом", и сегодня наткнулся на обсуждение похожей проблемы:
    
    
    Цитата
    arduino получает данные от AD7705 по CSP, переводит в понятные для компьютера
    формат (2 байта) и передает их в компьютер, компьютер исходя из
    предыдущих значений температуры по времени, реальных данных о
    температуре и коэффициентов пропорциональности, интегрирования и
    дифференцирования (подобранных опытным путем), а так же заданных
    максимальных значений мощности для верхнего и нижнего нагревателей,
    передает значения для ШИМ в Arduino
    Тут я запутался: ПК получает 2 байта, а в меню программы задать можно только 0-255. К тому же значение задаваемой мощности в меню программы также задаётся 0-255, что трудно воспринимается...
    Возможно, ясность внесло бы изучение протокола обмена между arduino и программой. Если, конечно, mvm_ksaa может передать его мне... Этот комплекс разрабатывался под нагреватели с большой инерционностью, и теперь, по прошествии почти 3х лет, я на практике знаю, что такими нагревателями очень непросто управлять - слишком велика задержка между командой от программы и реакцией датчика, особенно если он не вмонтирован непосредственно в нагреватель. Увы, если оба датчика в нагревателях - некому следить за температурой у чипа... Также ограничение задания уставки термостола 0-255 не позволяет набрать плате на стойках высотой 15мм температуру выше 130°С, а времени даже на это уходит слишком много, либо велики перелеты за уставку...
    Буду дополнять наблюдения в следующих постах.

    "Опыт — это то, что получаешь, не получив того, что хотел" © интернет
     

    mvm_ksaa
    Дата: Четверг, 01.10.2020, 04:25 | Сообщение # 186        
    Подполковник
    Группа: Модераторы
    Сообщений: 173
    Статус: Offline

    Cinema, здравствуйте, конечно я уже наверное подзабыл, потому как много что после этого проекта делал (ну работает и работает), но я действительно столкнулся с той же проблемой в свое время как мне помниться, так вот программа передает показание температуры не 2 байта, а 4, т.е. если температура указана выше 255 градусов, то программа раскладывает её на два байта, соответственно максимальная температура будет 510, мне хватает. Протокол так навскидку от станции глядя по скетчу 170(это постоянная начало блока), 1 байт температуры верхнего датчика, второй байт температуры верхнего датчика, первый байт температуры нижнего датчика, второй байт температуры нижнего датчика, и последний 255(FF), просто байт окончания блока. Итого 6 байт. Обратно на станцию приходят 4 байта, байт заголовка (АА), байт на ШИМ верхнего нагревателя, байт на ШИМ нижнего нагревателя (тут уже диапазон 00-FF, именно столько и понимает ШИМ контролера) и байт состояния подсветки дисплея, там по-моему два состояния 00 и 01 или 00 и FF точно уже не помню. По этому для ШИМ в программе и задается от 0 до 255, потому как большего для ШИМа и не надо. А вот температуру в профиле уже можно и 500 задать, так как со станции может и 500 прийти.

    Сообщение отредактировал mvm_ksaa - Четверг, 01.10.2020, 04:26
     

    mvm_ksaa
    Дата: Четверг, 01.10.2020, 04:36 | Сообщение # 187        
    Подполковник
    Группа: Модераторы
    Сообщений: 173
    Статус: Offline

    Хотел изначально протокол использовать Modbus RTU, но устройство Slave всего одно, Master тоже один, получается адресация ни к чему, контрольной суммы нету, поэтому нет проверки целостности пакета, ну вроде и не критично, скорости небольшие, длина линии связи тоже короткая, не 1200 метров на RS485 интерфейсе, поэтому протокол получился простейший проприетарный, ибо что мудрить то)))))

    Ps: кстати станцией сам не пользуюсь, подарил знакомым в сервис центр, работают нормально. У меня другие проекты, ремонтами не занимаюсь больше, только разработкой.


    Сообщение отредактировал mvm_ksaa - Четверг, 01.10.2020, 04:42
     

    suvorov_ak
    Дата: Суббота, 31.10.2020, 10:03 | Сообщение # 188        
    Рядовой
    Группа: Пользователи
    Сообщений: 2
    Статус: Offline

    Ребят, хочу поставить вместо делителя, ион ref192, но не могу понять как правильно, может кто помочь?
     

    mon
    Дата: Воскресенье, 01.11.2020, 17:53 | Сообщение # 189        
    Подполковник
    Группа: Модераторы
    Сообщений: 191
    Статус: Offline

    suvorov_ak, Вам бы почитать даташит на ad7705 и хотелка отпадёт само сабой,ну и про 4х проводную схему включения ,да и напряжение на ref+ ref-  1 вольт и никак не 2.5,а вот применение прецизионного линейного LDO стаба для стабилизации именно самой ad7705 с её обвязкой  сможет улучшить результат,но на сколько...думаю не существенно.
     

    Cinema
    Дата: Суббота, 07.11.2020, 10:55 | Сообщение # 190        
    Генерал-майор
    Группа: Проверенные
    Сообщений: 618
    Статус: Offline

    Народ, приветствую! Есть тут кто живой и кто 'в теме'? Подскажите, что я упустил. Вот оригинальный код mvm_ksaa
    
    Код
    #include <Wire.h>
    #include <AD770X.h>
    #include <LiquidCrystal_I2C.h>
    #include <string.h>
    AD770X ad7706(2.5);
    double R1, R2;
    LiquidCrystal_I2C lcd(0x3f, 20, 4);
    byte buzzerPin = 10;
    #define DRDY 5         
    #define RelayPin1 11    
    #define RelayPin2 12    
    #define EnableTop 2    
    #define EnableBottom 3
    byte LevelTop = 0x00;  
    byte LevelBottom = 0x00;
    double Temp_Top = 0;     
    double Temp_Bottom = 0;  
    int Temp1, Temp2, Temp11, Temp12;
    byte EnableLed = 0xFF;   
    char command_in[6];      
    const byte DESIRED_WIDTH = 3;
    void setup() {
      Serial.begin(9600);
      lcd.begin();
      lcd.clear();
      lcd.backlight();
      lcd.setCursor(1, 0);
      lcd.print("SOLDER STATION");
      lcd.setCursor(5, 1);
      lcd.print("v2.1.2");
      tone(buzzerPin, 523);
      delay(200);
      tone(buzzerPin, 659);
      delay(200);
      tone(buzzerPin, 784);
      delay(200);
      noTone(buzzerPin);
      delay(3000);
      lcd.clear();
      pinMode(RelayPin1, OUTPUT);
      pinMode(RelayPin2, OUTPUT);
      pinMode(EnableTop, OUTPUT);
      pinMode(EnableBottom, OUTPUT);
      digitalWrite(EnableTop, LOW);
      digitalWrite(EnableBottom, LOW);
      analogWrite(RelayPin1, LevelTop);
      analogWrite(RelayPin2, LevelBottom);
      ad7706.reset();
      ad7706.init(AD770X::CHN_AIN1);
      ad7706.init(AD770X::CHN_AIN2);
    }
    String addZeroes(const String& src, byte pad)
    {
      if (src.length() >= pad)
        return src;
      String result;
      byte add = pad - src.length();
      while (add--)
        result += "0";
      result += src;
      return result;
    }

    void loop() {
      while ( !digitalRead(DRDY) );
      R1 = ad7706.readADResult(AD770X::CHN_AIN1);
      double Temp_Bottom = (R1 - 1) / 0.00392;
      //delay(1);  // раскоментировать, если читает температуру некорректно
      R2 = ad7706.readADResult(AD770X::CHN_AIN2);
      double Temp_Top = (R2 - 1) / 0.00392 - 10;
      int i = 0;
      int buffer[6];
      if (Serial.available()) {
        delay(100);
        while ( Serial.available() && i < 7) {
          buffer[i++] = Serial.read();
        }
        buffer[i++] = '\0';
      }
      if (i > 0) {
        if (buffer[0] == 0xAA) {
          LevelTop = buffer[1];
          LevelBottom = buffer[2];
          EnableLed = buffer[3];
        }
        Temp1 = int(Temp_Top);
        Temp11 = 0;
        if (Temp1 > 255) {
          Temp11 = Temp1 - 255;
          Temp1 = 255;
        }
        Temp2 = int(Temp_Bottom);
        Temp12 = 0;
        if (Temp2 > 255) {
          Temp12 = Temp2 - 255;
          Temp2 = 255;
        }
        Serial.write(170);
        Serial.write(Temp1);
        Serial.write(Temp11);
        Serial.write(Temp2);
        Serial.write(Temp12);
        Serial.write(255);
      }
      if (LevelTop == 0x00) {
        digitalWrite(EnableTop, LOW);
      }
      if (LevelTop != 0x00) {
        digitalWrite(EnableTop, HIGH);
      }
      if (LevelBottom == 0x00) {
        digitalWrite(EnableBottom, LOW);
      }
      if (LevelBottom != 0x00) {
        digitalWrite(EnableBottom, HIGH);
      }
      analogWrite(RelayPin1, LevelTop);
      analogWrite(RelayPin2, LevelBottom);
      lcd.setCursor(1, 0);
      lcd.print("TH:");
      lcd.setCursor(1, 1);
      lcd.print("BH:");
      lcd.setCursor(8, 0);
      lcd.print("PWR:");
      lcd.setCursor(8, 1);
      lcd.print("PWR:");
      lcd.setCursor(4, 0);
      lcd.print(addZeroes(String(int(Temp_Top)), DESIRED_WIDTH));
      lcd.setCursor(4, 1);
      lcd.print(addZeroes(String(int(Temp_Bottom)), DESIRED_WIDTH));
      lcd.setCursor(12, 0);
      lcd.print(addZeroes(String(int(LevelTop)), DESIRED_WIDTH));
      lcd.setCursor(12, 1);
      lcd.print(addZeroes(String(int(LevelBottom)), DESIRED_WIDTH));
      if (EnableLed == 0x00) {
        lcd.noBacklight();
      }
      if (EnableLed == 0xFF) {
        lcd.backlight();
      }
    }
    Я подставил вместо библиотеки AD7705 функцию чтения для двух преобразователей сигналов термопары MAX6675, соответственно их подключил, задал состояние их пинам, заменил в скетче остальные пины подключения на удобные мне. Ввёл нужные переменные для корректной работы с MAX6675 (задаю частоту опроса). Сохранил имена переменных, используемых оригиналом для вывода в порт и на дисплей. Однако вывода температуры на LCD не происходит ни в простое, ни при коннекте с софтом.
    
    Код
    //редакция от 07/11/2020.

    //библиотеки
    #include <Wire.h>
    #include <string.h>
    #include <LiquidCrystal_I2C.h>
    LiquidCrystal_I2C lcd(0x3f, 20, 4);
    //#include <AD770X.h>
    //AD770X ad7706(2.5);

    //---MAX6675 functions---//
    double max6675_read_temp (int ck, int cs, int so)
    { char i;
      int tmp = 0;
      digitalWrite(cs, LOW);//cs = 0;                            // Stop a conversion in progress
      asm volatile (" nop"  "\n\t");
      for (i = 15; i >= 0; i--)
      { digitalWrite(ck, HIGH);
        asm volatile (" nop"  "\n\t");
        if ( digitalRead(so))
          tmp |= (1 << i);
        digitalWrite(ck, LOW);
        asm volatile (" nop"  "\n\t");
      }
      digitalWrite(cs, HIGH);
      if (tmp & 0x4) {
        return NAN;
      } else
        return ((tmp >> 3)) * 0.25;
    }
    //---MAX6675 functions---//

    //переменные
    double  Input1;                       //текущая температура(измеренная max6675) ВИ
    double  Input2;                       //текущая температура(измеренная max6675) НИ
    unsigned long nextRead2;           //переменная для обновления текущей температуры
    #define SENSOR_SAMPLING_TIME 250  //частота обновления текущей температуры (1000=1 раз в секунду)
    //---
    //double R1, R2;
    double Temp_Top = 0;
    double Temp_Bottom = 0;
    byte LevelTop = 0x00;
    byte LevelBottom = 0x00;
    int Temp1, Temp2, Temp11, Temp12;
    byte EnableLed = 0xFF;
    char command_in[6];
    const byte DESIRED_WIDTH = 3;

    //пины подключения
    //назначаем пины преобразователей термопар
    #define thermoSO  6                             //DO=(SO)
    #define thermoCLK  7                            //SCK=(CLK)
    #define thermoCStop  8                          //CS MAX6675 "ВЕРХНЕГО" нагревателя
    #define thermoCSbott  9                         //CS MAX6675 "НИЖНЕГО" нагревателя

    #define RelayPin1 12                            //назначаем пин "ВЕРХНЕГО" нагревателя
    #define RelayPin2 11                            //назначаем пин "НИЖНЕГО" нагревателя
    #define buzzerPin 10                            //назначаем пин пищалки
    //---
    //#define DRDY 9
    //#define RelayPin1 6
    //#define RelayPin2 5
    #define EnableTop 2
    #define EnableBottom 3
    //byte buzzerPin = 4;

    void setup() {
      Serial.begin(9600);
      //приветствие
      lcd.begin();
      lcd.clear();
      lcd.backlight();
      lcd.setCursor(1, 0);
      lcd.print("REWORK STATION");
      lcd.setCursor(5, 1);
      lcd.print("v3.0.0");

      //мелодия приветствия
      tone(buzzerPin, 523);
      delay(200);
      tone(buzzerPin, 659);
      delay(200);
      tone(buzzerPin, 784);
      delay(200);
      noTone(buzzerPin);
      delay(3000);

      //состояние пинов подключения
      pinMode(RelayPin1, OUTPUT);
      pinMode(RelayPin2, OUTPUT);
      pinMode(EnableTop, OUTPUT);
      pinMode(EnableBottom, OUTPUT);
      //задаём состояние пинов, к которым подключены MAX6675
      pinMode(thermoCStop, OUTPUT);
      pinMode(thermoCSbott, OUTPUT);
      pinMode(thermoCLK, OUTPUT);
      pinMode(thermoSO, INPUT);

      digitalWrite(EnableTop, LOW);
      digitalWrite(EnableBottom, LOW);
      analogWrite(RelayPin1, LevelTop);
      analogWrite(RelayPin2, LevelBottom);
      //ad7706.reset();
      //ad7706.init(AD770X::CHN_AIN1);
      //ad7706.init(AD770X::CHN_AIN2);
      lcd.clear();
      nextRead2 = millis();                    //запускаем чтение термопар
    }

    String addZeroes(const String& src, byte pad)
    {
      if (src.length() >= pad)
        return src;
      String result;
      byte add = pad - src.length();
      while (add--)
        result += "0";
      result += src;
      return result;
    }

    void loop() {
      unsigned long currentMillis = millis();
      if (millis() > nextRead2)
      {
        nextRead2 = millis() + SENSOR_SAMPLING_TIME;    //устраняем колебания датчиков температуры
        Input1 = Input1 * 0.8 + 0.2 * (max6675_read_temp (thermoCLK, thermoCStop, thermoSO)); //термопара "ВЕРХНЕГО" нагревателя
        Input2 = Input2 * 0.8 + 0.2 * (max6675_read_temp (thermoCLK, thermoCSbott, thermoSO)); //термопара "НИЖНЕГО"  нагревателя
        double Temp_Top = Input1;
        double Temp_Bottom = Input2;
        //double Temp_Bottom = (Input1 - 1) / 0.00392;
        //double Temp_Top = (Input2 - 1) / 0.00392 - 10;
      }
      //---
      //while ( !digitalRead(DRDY) );
      //R1 = ad7706.readADResult(AD770X::CHN_AIN1);
      //double Temp_Bottom = (R1 - 1) / 0.00392;
      //delay(1);  // раскоментировать, если читает температуру некорректно
      //R2 = ad7706.readADResult(AD770X::CHN_AIN2);
      //double Temp_Top = (R2 - 1) / 0.00392 - 10;

      int i = 0;
      int buffer[6];
      if (Serial.available()) {
        delay(100);
        while ( Serial.available() && i < 7) {
          buffer[i++] = Serial.read();
        }
        buffer[i++] = '\0';
      }
      if (i > 0) {
        if (buffer[0] == 0xAA) {
          LevelTop = buffer[1];
          LevelBottom = buffer[2];
          EnableLed = buffer[3];
        }

        Temp1 = int(Temp_Top);
        Temp11 = 0;
        if (Temp1 > 255) {
          Temp11 = Temp1 - 255;
          Temp1 = 255;
        }
        Temp2 = int(Temp_Bottom);
        Temp12 = 0;
        if (Temp2 > 255) {
          Temp12 = Temp2 - 255;
          Temp2 = 255;
        }

        Serial.write(170);
        Serial.write(Temp1);
        Serial.write(Temp11);
        Serial.write(Temp2);
        Serial.write(Temp12);
        Serial.write(255);
      }
      if (LevelTop == 0x00) {
        digitalWrite(EnableTop, LOW);
      }
      if (LevelTop != 0x00) {
        digitalWrite(EnableTop, HIGH);
      }
      if (LevelBottom == 0x00) {
        digitalWrite(EnableBottom, LOW);
      }
      if (LevelBottom != 0x00) {
        digitalWrite(EnableBottom, HIGH);
      }
      analogWrite(RelayPin1, LevelTop);
      analogWrite(RelayPin2, LevelBottom);

      lcd.setCursor(1, 0);
      lcd.print("TH:");
      lcd.setCursor(1, 1);
      lcd.print("BH:");
      lcd.setCursor(8, 0);
      lcd.print("PWR:");
      lcd.setCursor(8, 1);
      lcd.print("PWR:");
      lcd.setCursor(4, 0);
      lcd.print(addZeroes(String(int(Temp_Top)), DESIRED_WIDTH));
      lcd.setCursor(4, 1);
      lcd.print(addZeroes(String(int(Temp_Bottom)), DESIRED_WIDTH));
      lcd.setCursor(12, 0);
      lcd.print(addZeroes(String(int(LevelTop)), DESIRED_WIDTH));
      lcd.setCursor(12, 1);
      lcd.print(addZeroes(String(int(LevelBottom)), DESIRED_WIDTH));
      if (EnableLed == 0x00) {
        lcd.noBacklight();
      }
      if (EnableLed == 0xFF) {
        lcd.backlight();
      }
    }

    Добавлено (07.11.2020, 11:01)
    ---------------------------------------------
    Смущают вот эти строчки, кстати:
     

    Код
    double Temp_Bottom = (R1 - 1) / 0.00392;

      double Temp_Top = (R2 - 1) / 0.00392 - 10;
    К такому формату привязан расчет ПИД в софте? Как тогда интерпретируются данные из функции чтения MAX6675? - некорректно для вывода на LCD?

    Добавлено (09.11.2020, 22:20)
    ---------------------------------------------

    Цитата Cinema ()
    Смущают вот эти строчки
    Надо просто даташит на PT100 почитать - смущение пройдет.
    Без замены строки в файле .cpp самой библиотеки AD7705 на указанную mvm_ksaa в посте 
    , на LCD отображалась дребедень.
    Однако, остальные проблемы, первая из которых - отсутствие взаимодействия ВСЕХ РЕЛИЗОВ софта с контроллером, ждут решений. Напомню - шилд я собрал 2 года назад,
    
    но, к сожалению, желающих повторить этот проект, можно сказать, не нашлось...
    Усугубило ситуацию и то, что в отличие от проекта LDZ, поддержка, на отсутствие которой указал на первых страницах этой темы сам mvm_ksaa, так и не была им реализована вовсе. И также остались недоступны для редактирования файлы софта... По мере появления свободного времени, попытаюсь запустить связку (ПО + arduino & шилд) проекта, т.к. оценить его возможности и недостатки на текущий момент никак не получится, пока ПО не начнёт общаться с arduino. Для наглядности, нынче соберу плату индикации, как это реализовано у самого mvm_ksaa. Так что заходИте в тему поболтать, может, что-нибудь дельное подскажете. А уж я, окрылённый поддержкой и успешным запуском проекта, обязательно систематизирую полученную инфу и разложу здесь по пунктикам smile

    "Опыт — это то, что получаешь, не получив того, что хотел" © интернет

    Сообщение отредактировал Cinema - Суббота, 07.11.2020, 10:56
     

    Cinema
    Дата: Понедельник, 09.11.2020, 23:27 | Сообщение # 191        
    Генерал-майор
    Группа: Проверенные
    Сообщений: 618
    Статус: Offline

    Архив с "причёсанным" немного, оригинальным скетчем крайней версии от mvm_ksaa под его шилд выкладываю здесь. В этом же архиве поправленная версия скетча skayp606 под использование ZCC и силовой схемы на основе оптотриаков без встроенного узла детектирования нуля. Оригинал от skayp606 лежит в посте его по ссылке
    

    В архиве также есть библиотека дисплея и поправленная по предложению mvm_ksaa библиотека для АЦП.
    Небольшое уточнение по строчке кода
    
    Код
    double Temp_Top = (R2 - 1) / 0.00392 - 10;
    Здесь "минус 10" - это от показаний датчика отнимаем 10°С. При калибровке датчиков, вместо этого числа можно указать подходящее конкретно в вашем случае, для выравнивания показаний и соответствия их действительным значениям измеряемой при калибровке датчиков температуры. То же и для Temp_Bottom. Можно и отнимать и прибавлять, т.к. PT100 практически линейны во всём диапазоне измерений.
    Прикрепления: mvm_ksaa_091120.zip (60.8 Kb)

    "Опыт — это то, что получаешь, не получив того, что хотел" © интернет

    Сообщение отредактировал Cinema - Вторник, 10.11.2020, 10:39
     

    Cinema
    Дата: Вторник, 10.11.2020, 17:11 | Сообщение # 192        
    Генерал-майор
    Группа: Проверенные
    Сообщений: 618
    Статус: Offline

    Испробовал все варианты скетчей, все релизы софта. Картина одинаковая, не зависящая также от порта и его скорости. На LCD t°C TH:18 и TB:28. При нажатии коннект в софте и запуске пайки, на LCD значения мощностей остаются 000 и 000.
    Прикрепления: 7227325.jpg (122.4 Kb)

    "Опыт — это то, что получаешь, не получив того, что хотел" © интернет
     

    Cinema
    Дата: Пятница, 13.11.2020, 20:32 | Сообщение # 193        
    Генерал-майор
    Группа: Проверенные
    Сообщений: 618
    Статус: Offline

    На текущий момент скетч переписан для использования двух термопар ТХА (K-Type), совместно с модулями преобразователей сигнала термопар на микросхемах MAX6675. Используется стандартная библиотека для MAX6675. Пины подключения изменены так, чтобы быть совместимыми с веткой v1.3.x контроллеров из темы http://radioservice.at.ua/forum/23
    На LCD температура выводится корректно, однако есть проблемы с софтом. На лицензионной Win7x64 софт, причём любой версии, вылетает после нажатия в нём кнопки connect. Установил последние обновления, отключал антивирус и файрвол, ничего хорошего не получилось. В ближайших планах - установлю на новый чистый жесткий диск чистую (с заводскими параметрами) Win7x64 с необходимыми драйверами и дополнениями. Снова попробую запустить софт. Отчитаюсь.
    P.S.: ХЗ почему, писать посты в этот форум через Mozilla Firefox - ад адский, думать стал об уходе с форумов сайта. Сейчас пост делаю в Google Chrome и пока всё работает без тормозов...
    Прикрепления: MyWork.ino (5.8 Kb)

    "Опыт — это то, что получаешь, не получив того, что хотел" © интернет
     

    o514scp
    Дата: Пятница, 13.11.2020, 20:53 | Сообщение # 194        
    Подполковник
    Группа: Пользователи
    Сообщений: 109
    Статус: Offline

    Цитата Cinema ()
    совместно с модулями преобразователей сигнала термопар на микросхемах MAX6675. Используется стандартная библиотека для MAX6675. Пины подключения изменены так, чтобы быть совместимыми с веткой v1.3.x контроллеров из темы http://radioservice.at.ua/forum/23
     Посмотрю, может и возьму на заметку, попробую быть может(когда-нибудь). Для калибровки подразумевается мультиметр/термометр с термопарой ?
    Цитата Cinema ()
    однако есть проблемы с софтом
    Пока что только управление вентилятором смог проверить, запуск/регулировка есть, но вкл/выкл нет такого. Вообще, когда заставлю мозги (пока что ldz еще с компом не хочет дружить) все работать, рулить хотелось бы из-под WinXP, с выделенного для этих целей ноута(который x64 win потащит, доукомплектовывать и собирать). 
    Цитата Cinema ()
    через Mozilla Firefox - ад адский, думать стал об уходе с форумов сайта
    В какой-то момент заметил, что огнелис жрет память, и перешел на Google Chrom. Что-то нахимичили они(
     

    Cinema
    Дата: Понедельник, 16.11.2020, 22:37 | Сообщение # 195        
    Генерал-майор
    Группа: Проверенные
    Сообщений: 618
    Статус: Offline

    Перевел я, в порядке эксперимента, скетч mvm_ksaa на работу с MAX6675 с термопарами, вместо AD7705 с PT100 (соответственно, шилд стал не нужен). Теперь софт и коннектится и управляет. Однако, куда ж без затыков  Дело в том, что слишком часто опрашивать ic MAX6675 нехорошо, а с рекомендуемой её даташитом задержкой в 220-170ms софт вылетает с ошибкой, а зачастую ещё и ардуинку зацикливает/вешает. Сейчас в скетче для моих конкретных экземпляров модулей MAX6675 задержка установлена 140ms и вылетов не наблюдается, однако, насколько истинны показания температур на дисплее и в окне софта - вопрос, требующий реальных испытаний. Мои познания скромны, и я смею полагать, что исправить такое положение дел можно через правки в софте, чего добиться не получится в принципе, т.к. проект автор забросил...
    Прикрепления: EXT_mwm_ksaa.zip (18.6 Kb) · 1868837.jpg (97.0 Kb)

    "Опыт — это то, что получаешь, не получив того, что хотел" © интернет

    Сообщение отредактировал Cinema - Понедельник, 16.11.2020, 22:46
     

    Поиск: