ИК паяльная станция на Arduino Mega 2560. Доработка скетча "ARS_v2_Lilium_JSN"

Тема в разделе "Глядите, что я сделал", создана пользователем Jalnin, 2 ноя 2012.

  1. chirokiy77

    chirokiy77 Нерд

    все заменил исправленную библиотеку утфт изображение теперь встало как нужно Dmitrysh вам персональная благодарность и спасибо за помощь да и ВСЕМ спасибо кто участвует в этом проекте и внес свой не малый труд
     
  2. Ptisa

    Ptisa Нерд

    Всем доброго времени суток. Почти закончил слесарные работы. Есть несколько вопросов. Какой скетч залить для начала? На какой вывод меги подключать детектор ноля? Какое расстояние (приблизительно) от ламп низа до платы?
     

    Вложения:

  3. Yojiq

    Yojiq Гик

    Скетч из #2184 сообщения самый доработанный на сегодня, все что касается подключения учитесь читать в скетче ( я сам двоечник и тоже осваиваю, отпадает много вопросов ).
    Расстояние начните с 3-4 см для вашего случая будет норм
     
    Ptisa нравится это.
  4. SOLOway

    SOLOway Гик

    А поясните, пожалуйста, это случайно так вышло, что в этом посте, в скетче, строка, определяющая подключение и использование прерывания, закомментирована?
    Код (C++):
     //attachInterrupt(0, Dimming, RISING); // настроить порт прерывания(0 или 1) 2й или 3й цифровой пин
    Или в этой версии не используется ZCC?
     
  5. Yojiq

    Yojiq Гик

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

    Вложения:

    binaver нравится это.
  6. Watashi

    Watashi Гик

    Это случайность. Я перезалью скеч и заодно исправлю с А5 на А0 аналоговой подключение клавиатуры. А с подключением максов назначение пинов это доработки Dmitrysh, их менять не буду.
    Если теоретически подходить к логике написания программ, то ZCC нужно включать не в setup-е, а в начале цикла пайки и при завершении выключать. но можно и так как есть.
     
  7. Dmitrysh

    Dmitrysh Гик

    Вообще-то так как раз обычно не делают. Если прерывание нужно, его включают и пользуются. А если нужно что-то сделать монопольно, то прерывания просто на время запрещают. Ещё прерыванием от zcc можно мерять время, если нужно.
     
  8. Dmitrysh

    Dmitrysh Гик

    А зачем нам Union?
     
  9. Watashi

    Watashi Гик

    Чтоб возникало меньше вопросов внес изменения:

    1. Все назначения пинов подключения вывел в начало кода.

    2. Дабы убрать путаницу с пинами подключения, ввел понятие СТАНДАРТНЫЕ пины и АЛЬТЕРНАТИВНЫЕ пины подключения. Теперь каждый может настроить под свою станцию подключения пинов.
    // #define SetAltPin // Раскомментировать, если используются АЛЬТЕРНАТИВНЫЕ пины для подключения

    3. касаемо картинки на Стартовый экран. Смотрите последствия описанные ниже, если они вам безразличны, то в текущем варианте есть строка:
    // #define SetPicHeater Ее можно раскомментировать если нужна картинка на стартовом экране
    При этом файл Heater2 должен быть в папке со скетчем.

    пысы: добавил в настройки пинов подключение детектора нуля (ZCC) и возможность работы без него.
     

    Вложения:

    Последнее редактирование: 25 мар 2019
    Ptisa и SOLOway нравится это.
  10. Watashi

    Watashi Гик

    Сначала создается структура с данными. Ее нельзя одним обращением записать в EEPROM (нужно записывать каждое поле структуры побайтно), за то можно записать массив байтов например: byte DATA[20],
    а Union позволяет использовать один и тот же кусок памяти и для структуры и для DATA? т.е. читая-записывая в элементы структуры, потом можно тот же самый кусок памяти отправить в EEPROM как DATA .
     
  11. Watashi

    Watashi Гик

    Это так, если используется один источник прерывания, а если несколько? это чисто теоретический вопрос. в нашем случае это не принципиально.
     
  12. Dmitrysh

    Dmitrysh Гик

    К сожалению, это реалии жизни. И у нас прерывание не одно, а минимум 2. В таком случае, обычно, программист сам должен следить, чтобы они не конфликтовали, или хотя-бы не слишком мешали друг другу.
    Да согласен.
     
  13. Dmitrysh

    Dmitrysh Гик

    Смотрите. Создаём структуру
    Код (C++):
    struct pr {  // основные поля профиля
    byte profileSteps; //количество шагов профиля
    byte Setpoint2;
    byte rampRateStep[3]; //скорость роста температуры
    byte dwellTimerStep[3]; //установленное время перехода на следующий шаг
    byte temperatureStep[3]; //заданные температуры для шагов профиля ВИ
    byte min_pwr_TOPStep[3];       //минимальная мощность верхнего нагревателя
    byte max_pwr_TOPStep[3];       //максимальная мощность верхнего нагревателя
    byte kp1;
    byte ki1;
    byte kd1;
    byte kp2;
    byte ki2;
    byte kd2;
    byte tableSize;
    byte min_pwr_BOTTOM;              //минимальная мощность нижнего нагревателя
    byte max_pwr_BOTTOM;              //максимальная мощность нижнего нагревателя
    };
    byte SizeProfile = sizeof(pr); // длинна поля данных
    pr profile;
    Подпрограмма чтения
    Код (C++):
    void loadProfile()//this function loads whichever profile currentProfile variable is set to
    {
      EEPROM.get((CurrentProfile-1)*SizeProfile,profile);
    }
     
    Подпрограмма записи
    Код (C++):
    void saveProfile()//this function saves whichever profile currentProfile variable is set to
    {
      EEPROM.put((CurrentProfile-1)*SizeProfile,profile);
    }
     
    Обращаемся к элементам так(на примере ki2)
    Код (C++):
    profile.ki2=5;
    поэтому у меня и возник вопрос зачем нам union.
     
  14. Watashi

    Watashi Гик

    Теоретически EEPROM.get() и EEPROM.put() должны записать всю структуру, но почему то пишут только 1 байт, я уже прокалывался с типом int и float , пришлось писать подпрограмку чтобы разбивать и писать int на старший и младший байты. Я полагаю и здесь та же беда. Есть еще один момент, свою прогу я грузил в DUE , а там нет EEPROM-а и пришлось грузить настройки в флеш память 24C32 на платке RTC и использование Union все решило малой кровью.
     
    Последнее редактирование: 21 мар 2019
  15. Dmitrysh

    Dmitrysh Гик

    Proteus показывает, что пишется вся структура. Залил тестовый скетч в UNO тоже всё пишет.
     
  16. Watashi

    Watashi Гик

    Опыт был пару лет назад, видимо уже поправили библиотеку. Тогда union действительно не нужен.
     
  17. tssergej

    tssergej Нерд

    О какой картинке идет речь, та что на видео из поста #2212 Или же в этом скетче что то еще?
     
  18. Watashi

    Watashi Гик

    И заставка на видео и Heater2 это одно и то же.
     
  19. Watashi

    Watashi Гик

    На выходных довел нижний подогрев до состояния тестирования. Сегодня подключил его на прошивке из поста #2228. Поскольку за детектор нуля я еще не брался, воплотил свою идею использовать программное прерывание от таймера и О! Чудо! все заработало: лампы моргают, температура держится, ПИД регулятор работает.
    Поскольку в используемой прошивке, я не перенес настройку пина прерывания в верхнюю часть программы, добавляю следующее:
    Код (C++):
    //------------------------------------------------------
    // если детектор нуля не используется - закомментировать оба варианта #define
    // и будет использоваться программный таймер (нужна библиотека MsTimer2.h)
    // скачать по ссылке https://github.com/PaulStoffregen/MsTimer2
    //
    // назнаение пина детектора нуля ZCC
    #define SetInterrupt 0     // подключение к пину 2
    // #define SetInterrupt 1     // подключение к пину 3
    //------------------------------------------------------
     
    Теперь можно сравнить работу с ZCC и без него.
    перезалил readme и скетч в посте #2228
     
    Последнее редактирование: 25 мар 2019
  20. Dmitrysh

    Dmitrysh Гик

    так и должно быть, будет работать и без таймера, просто на millis, вопрос на сколько хорошо и точно.
    есть вопрос, а библиотека для tft под DUE случаем не осталась?