Да, именно так и описал. У меня не работает, помогите. Какую прошивку заливал, х.з. На какие пины экран повесил, х.з. Вам выше описали, что проблема или в контакте, или в неверном адресе i2c. Прочтите первые 2 страницы форума, автор все расписывал. И как адрес i2c определить в том числе.
Alex,прошивка и плата из вашего архива. Только дисплей 1602. Сканером проверил адрес i2c ,изменил в прошивке. Контакт проверил все норм. На дисплее два ряда квадратиков. Прошивка ваша ss2.2 .
Alex я подозреваю дело не в прошивке. А в дешёвом китайском экране. Не хочет он выводить буквы. Заливал примеры,квадратики мигают ,курсор перемещается по квадратикам и по строчкам но буквы выводить не хочет.
День добрый. Если не ошибаюсь, где-то здесь был вариант одноплатной паялки в SMD-факторе. Но что-то листаю-листаю, не найду. Буду благодарен, если ткнете носом.
Спасибо за отклик. Думал форум к нему в почту постучится, если он живой)). Хотел его вариант посмотреть с энкодером, по его ссылке что вы дали, ничего. Станцию собираю. Пока на вашем варианте остановился. Есть новая идея паястанции, если не против, чуть позже сброшу на мыло, как проработаю железо. Нужно будет ваше соавторство )), если будет желание, ибо я "не писатель, а читатель" )) Да, плат готовых не осталось? А то я так красиво не сделаю, а скитая долго.
OlegK доброе время суток.Подскажите пожалуйста собрал клон вашей паяльной станции подал 5вольт канал фена при нагревании зажигалкой изменяются показания а канал паяльника стоит на 23 г и не каким регулировкам не поддаётся в паяльнику стоит 50 ом термосопротивление
Добрый вечер. Вы писали что Можно применить и что-то проще, типа LM358, но в коде придётся сделать небольшое исправление. какое исправление нужно делать ,а то не дам ладу каналу паяльника.
Александр, при желании помочь вам разобраться, если вы сами этого действительно хотите, и потратить свое личное время не впустую, у любого, кто НЕ находится рядом с вами над вашим изделием, возникнут вопросы для понимания ситуации, тем более дистанционно, "с нуля". Посему воспринимайте простые вопросы адекватно. Ок? Для примера, когда-то в юности, году так в 1984, я разобрал пол телевизора, хотя причина оказалась в частичном дефекте выключателя питания, контакт был, но под нагрузкой, при небольшом нагреве размыкался ;-))
Поэтому я не намерен снова повторять ту ошибку юного радиолюбителя.
0. Читаем внимательно файл "Настройка усилителей термодатчиков.txt" (прикрепил внизу, на всякий случай) и перезаливаем прошивку с отключенными защитами:
отрывок:
Не нужно крутить "начало" при нагретом паяльнике. ТОЛЬКО при остывшем до комнатной.
1. Пока канал не настроен, дополнительные защиты нужно отключить.
/* if you want deactivate additional protection, then COMMENT it */
#define HA_ADV_PROT_ON - для канала фена
#define S_ADV_PROT_ON - для канала паяльника
и перезалить прошивку.
1. Я уже спрашивал о том, что показывает при отключенном паяльнике, и не перепутаны ли в разъеме контакты нагревателя и терморезистора, не просто так что мне нефиг делать, поумничать. Вы ответили только данными по сопротивлению, и все, из чего я только понял что вы понимаете что у них разное R, но не понял как и где вы замеряли. На разъеме провода отключенного паяльника? Тогда вы не ответили на мой вопрос. Или при подключенном паяльнике измерили на плате, на входе в усилитель? Тогда правильно, но я не экстрасенс, что бы понять это по вашему ответу, и двинуться дальше. А если при отсоединенном паяльнике показывает ту же температуру, то это указывает на другое. Много уходит времени на выяснение вашей же ситуации при неполном, непонятном ответе. (уверен, что вы уже проверили работоспособность термодатчика паяльника, измерив ↑R на разъеме провода паяльника при нагреве керамики?)
2. После этого, если все правильно, давайте проверим работу усилителя с ЛМ358. Отключи паяльник из разъема, и на вход усилителя подключаем переменное сопротивление 100 ом, установленное на 50ом. При ↑ R, должно ↑ V на выходе ОУ по вашей схеме лапа №1. Я не использую ЛМ и не хочу морочиться, но насколько помню, у неё Vвых макс.= 0,5Vпитания, при отпаянном выводе резистора 10кОм от 25 лапы (А6) АрдуНаНо. Если все в порядке, паяем обратно. В принципе при рабочем усилителе на дисплее t° тоже должна ↑. (Если так, ползем от платы наружу, через шлейф, разъем и до нагревателя, в этом случае обычно перепутаны нагреватель и датчик, но ведь мы уже это проверили? ;-)) Проверяем далее, что на 25 лапе (А6) АрдуНаНо. Если все в порядке, V с усилителя есть (или не в порядке, замкнуто на массу), но (и) t° на дисплее не ↑, отключи выход усилителя ФЕНА от АрдуНаНо, лапа №26 (А7), отпаяв вывод резистора 10кОм, и отключи выход усилителя паяльника от АрдуНаНо, лапа №25 (А6), тоже отпаяв вывод резистора 10кОм, подключи его, усилитель паяльника, с резистора 10кОм, вместо усилителя фена на лапу №26 (А7) АрдуНаНо, т.е. на проверенный в работе канал фена, и посмотри изменение данных t° фена на дисплее при изменении переменного сопротивления 100 ом на входе усилителя, или при нагреве подключенного паяльника. Порт АрдуНаНо 25 лапа (А6) может тоже оказаться сгоревшим, для этого и проверяем.
Делаем пока так, если раньше не было сделано. Исключаем, двигаемся дальше.
Расписал подробно. Знал бы тебя, к примеру что достаточно написать "отключи выход усилителя ФЕНА", вместо подробного изложения, мне было бы конечно проще.
"Настройка усилителей термодатчиков.txt"
Не нужно крутить "начало" при нагретом паяльнике. ТОЛЬКО при остывшем до комнатной.
1. Пока канал не настроен, дополнительные защиты нужно отключить.
2. Отключить можно, закомментировав дефайны -
/* if you want deactivate additional protection, then COMMENT it */
#define HA_ADV_PROT_ON - для канала фена
#define S_ADV_PROT_ON - для канала паяльника
и перезалить прошивку.
---
Рассмотрим настройку канала паяльника.
3. Привязываем к жалу паяльника термопару мультиметра.
4. Канал не включаем. При остывшем до комнатной температуры паяльнике нужно настроить показания,
соответствующие комнатной температуре. Подстроечником "начало". Если не получается уменьшить
показания, то резистор, последовательно с этим подстроечником нужно несколько увеличить.
И наоборот, если не получается увеличить, то резистор уменьшить.
5. Задаём какой-нибудь небольшой нагрев (100-200 град) и включаем канал. Смотрим температуру по
термопаре мультиметра и то, что показывает дисплей. Подкручиваем подстроечник "шкала", что бы
показания соответствовали реальным. Торопиться не нужно, процесс инерционный, лучше подождать,
пока температура устаканится. Если показания нужно увеличивать, а подстроечника не хватает, то
последовательное сопротивление с этим подстроечником нужно увеличить. И наоборот.
6. Выставили 100-200 град. Выключаем канал и курим до полного остывания паяльника до комнатной
температуры. Смотрим, куда уползли показания. Если нужно - подстраиваем "началом".
7. Задаём температуру 300-350 град. Включаем канал и подстраиваем, как в п. 5 "шкалой".
8. Выключаем, остужаем до комнатной, если нужно подстраиваем "началом".
9. Можно повторить пункты 7 и 8 до результата, когда остывший паяльник "выдаёт" температуру близкую
к комнатной, а нагретый- близкую к измеренной. Не забываем, что нужно давать температуре устояться.
10. Теперь можно отвязать термопару мультиметра и, по желанию, включить отключённые доп.
защиты - раскомментировать вышеуказанные дефайны и перезалить прошивку.
Для канала фена всё абсолютно так же.
Образцовую ТП нужно расположить в фокусе струи воздуха (находится по макс. показаниям образцовой ТП),
на расстоянии, при котором планируется работать (например, 10-30мм) и не трогать её положения до окончания
Добрый вечер. Вы писали что Можно применить и что-то проще, типа LM358, но в коде придётся сделать небольшое исправление. какое исправление нужно делать ,а то не дам ладу каналу паяльника
Все что нужно для 328 у вас в коде отмеченно. А именно строка 27. Выбрана lm328. Т.е. коэф. умножения для нее будет 2, по причине формулы вых. напряжения (0.5 Vcc), вроде.
канал паяльника который не работал наладил ночью сделал так нагрел феном термистор до 300 гр. и начал крутить подстрочники и всё заработало теперь буду настраивать дальше следуя вашей инструкции
поздравляю. Так понял прошивка была залита с включенными защитами до первого включения и настройки? Теперь по рекомендациям авторов настраивайте, по текстовому файлу. (это их рекомендации). Я сам пока не доделал станцию с этой же платой. нет времени. разбираюсь с вариантом на энкодере и с часами. заморочки с библиотеками. не могу пока заставить работать вариант с другими часами. Удачи. отпишитесь по результатам. порадуемся вместе ;-))
Вариант с энкодером от MadTux нормально работает. Проверено неоднократно. Часы выброшены нахрен. Ибо нафиг не нужны. Плата, что выше мелькала, моей разводки , проверена также неоднократно. Все проблемы здесь уже обсуждались неоднократно. Если кому-то лень прочитать десяток первых страниц форума, то это его проблемы...
Привет Алекс. Не хотел беспокоить с вопросами. Плату из ваших старых запасов собрал, с кнопками на макете запускается. Но я хочу с энкодером. Корпус красивый прикупил, но довольно компактный, неудобно будет с кнопками... Часы на другом чипе запустить не удалось, упирается в некорректную работу библиотек, особенно санрайз.... Выкорчевывал часы из кода. Санрайз выдрал, не ругается, меню переделывал, с остальным (часами) не получается, компиляция с ошибками, в программировании на уровне дилетанта, изучаю. В том архиве, что вы мне сбрасывали, не нашел прошивки с энкодером без часов, в архиве от MadTux тоже. Форум изучил, но повторю, с программированием туго. Да и 90% выкладывавшихся материалов по ссылкам, удалены. Если вы поможете с этой прошивкой, сбросите, буду премного благодарен. Спасибо за внимание! ub3b_radio(&)yahoo.com
Ок, этим и занимаюсь, поборюсь, но победа похоже, будет не за мной... Наверно буду или модуль часов на "правильной" микросхеме заказывать, либо делать сенсорные кнопки за лицевой панелью. А жаль... MadTux, заразка, видимо с часами разбирался, и приКуевертил к паяльнику и смылся. Ладно часы, так ещё и расчёт рассвета-заката в зависимости от координат, нафиг это всё паяльнику!!! :-)) Интересно, здесь на форуме ещё кто-нибудь остался, кто может помочь?
... только у меня вылетает ошибка по библиотеке Sunrise.h
Данный код адаптирован под управление только одним энкодером.
* В качестве "плюшки" добавлен модуль часов реального времени.
* Адаптировал MaD-TuX.
Да есть у меня вся эта ... с "плюшками", нахрен бы они упали!
И будет вылетать ошибка пока не найдешь ту библиотеку, что М. использовал. А если он её ещё под себя изменил, то Придётся по библиотеке менять команды. Я его выкорчевал, борюсь с часами. И часы DS3231 ибо похоже команды под них, а не для DS1307. Где-то видимо недогоняю в другом, ладно, х_с ним, разберусь, или на кнопках сделаю без будильника. Повелся на защиты в схеме, понравилось, а то что проект уже подох и хрен кто поможет, не учёл. Алекс1978 остался, и FagotBah человеки! Хотел же другую делать...
Да и посмотри в коде, ссылку на который ты мне прислал, строки 40 и 122. Не настораживает?
mr.nikon Приветствую! А по прошивкам с энкодером помочь не можете? Без часов желательно, или помочь выкорчевать. (Я не программер, только начинаю, на старости ;-)) Или с работающими здесь библиотеками. А то я не могу заставить работать и энкодер. кнопку запустил, а вращения нет. Ошибку не выдает при компиляции, но не крутит... Перепробовал уже кучу библиотек и энк., энкодеры рабочие...
Контраст тут не причем. Верхний ряд в квадратах, означает отсутствие инициализации. Либо нет где то контакта, либо указан неверный адрес i2c.
Да человек вообще интересный. У меня не получается, помогите. Что не получается, догадайтесь сами.
Контрастность крутил не помогло. Прошивал из примеров hello world ,появляется второй ряд квадратиков но буквы не выводятся на дисплей.
Alex зачем догадываться, я описал проблему.
Да, именно так и описал. У меня не работает, помогите. Какую прошивку заливал, х.з. На какие пины экран повесил, х.з. Вам выше описали, что проблема или в контакте, или в неверном адресе i2c. Прочтите первые 2 страницы форума, автор все расписывал. И как адрес i2c определить в том числе.
Alex,прошивка и плата из вашего архива. Только дисплей 1602. Сканером проверил адрес i2c ,изменил в прошивке. Контакт проверил все норм. На дисплее два ряда квадратиков. Прошивка ваша ss2.2 .
Вспомнить бы ещё чего я там менял в прошивке 2.2. Она вроде под экран 20х4.
Alex я подозреваю дело не в прошивке. А в дешёвом китайском экране. Не хочет он выводить буквы. Заливал примеры,квадратики мигают ,курсор перемещается по квадратикам и по строчкам но буквы выводить не хочет.
Экран без латинских букв? Х.з. Может он с кириллицей?
Сходил купил экран с кириллецей , прошил все заработало. Извиняюсь за доставленные неудобства.
День добрый. Если не ошибаюсь, где-то здесь был вариант одноплатной паялки в SMD-факторе. Но что-то листаю-листаю, не найду. Буду благодарен, если ткнете носом.
To: MaD-TuX
http://www.mad-tux.tk/solder-station
Здравствуйте а можете скинуть файл вашего проекта спасибо.
А то ссылка нерабочая.
ub3b_radio(a)yahoo.com
Наконец-то и я закончил свой вариант паяльной станции. Все просто чудесно.
Если читать информацию в ветке не бегло, то все прекрасно начинает работать практически с первого раза.
Да простят меня участники форума :), я собрал по ветке основную часть информации и рекомендаций и оформил как отдельную статью у себя на сайте.
Также там выложены все файлы по моему клону
http://www.mad-tux.tk/solder-station
Здравствуйте а можете скинуть файл вашего проекта?
А то ссылка нерабочая.
ub3b_radio(a)yahoo.com
Чувак давно послал всех. Вы хоть на даты постов смотрите. Что надо конкретно?
Спасибо за отклик. Думал форум к нему в почту постучится, если он живой)). Хотел его вариант посмотреть с энкодером, по его ссылке что вы дали, ничего. Станцию собираю. Пока на вашем варианте остановился. Есть новая идея паястанции, если не против, чуть позже сброшу на мыло, как проработаю железо. Нужно будет ваше соавторство )), если будет желание, ибо я "не писатель, а читатель" )) Да, плат готовых не осталось? А то я так красиво не сделаю, а скитая долго.
Все платы я утилизировал. Сеголня получил новую партию плат,которая выросла из этого проекта, но уже мало чего общего с ним имеет...
Интересно посмотреть. Поделитесь, плиз, информацией проекта, пока делать не начал. И если то, как купить-получить?
Никак. Ни купить ни получить. Если интересна информация, пишите на мыло alexfree78псинаyandex.ru
Отписался, жду.
Ссылка на станцию от MaD-TuX (полный архив)
https://fex.net/ru/s/lznbytv
Огроменное спвсибо! Все открывается!
Alex доброго времени суток. Можно посмотреть ваш новую станцию? dimon-0671@yandex.ru
OlegK доброе время суток.Подскажите пожалуйста собрал клон вашей паяльной станции подал 5вольт канал фена при нагревании зажигалкой изменяются показания а канал паяльника стоит на 23 г и не каким регулировкам не поддаётся в паяльнику стоит 50 ом термосопротивление
это ваша пронивка /* * * * * * * * * * * * * * * * * * */ /* Soldering Station v 2.2 */ /* coded by OlegK /Ruslan S */ /* arduino.ru/forumy/proekty */ /* * * * * * * * * * * * * * * * * * */ #include <EEPROM.h> #include <CyberLib.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <Bounce2.h> #include <avr/io.h> #include <avr/interrupt.h> /* it's fuckin' magic! */ #if 1 __asm volatile ("nop"); #endif /* Options */ /* if you need to create themperature diagramm then uncomment it */ //#define NEED_GRAPH /* if used not rail-to-rail OPA, then uncomment it */ #define LM358 /* if used passive busser, then uncomment it */ #define PASSIVE_BUZZER /* if you want deactivate additional protection, then COMMENT it */ #define HA_ADV_PROT_ON #define S_ADV_PROT_ON /* if used LCD 1602, then uncomment it */ #define LCD_1602 /* End options */ #define FIRMWARE_VERSION "2.2" #ifdef LCD_1602 LiquidCrystal_I2C lcd(0x3F, 16, 2); #endif /* Degree symbol */ uint8_t degree[8] = { B01100, B10010, B10010, B01100, B00000, B00000, B00000, B00000 }; /* Arrow symbol */ uint8_t arrow[8] = { B00000, B00100, B00010, B11111, B00010, B00100, B00000, B00000 }; /* mode selector */ #define modeSolder 1 #define modeHotAir 2 #define modeFanPWM 3 boolean need_S_countdown = false; byte selected_Mode = modeSolder; byte HA_countdown = 1; byte S_countdown = 1; uint16_t HA_sleeptime = 9; uint16_t S_sleeptime = 9; uint16_t Graph_count = 0; uint32_t UPbuttonPressTime = 0; uint32_t DWNbuttonPressTime = 0; uint32_t SONbuttonPressTime = 0; uint32_t HAONbuttonPressTime = 0; boolean UPbuttonState, DWNbuttonState, SONbuttonState, HAONbuttonState; byte Count; uint16_t Duration, Interval; char bspace[ ] = " "; #define pinBuzzer 12 #define pinFanPwm 6 #define pinSolderPwm 5 #define min_solder_temp 100 #define max_solder_temp 400 #define min_hotair_temp 50 #define max_hotair_temp 450 #define min_rpm 30 #define max_rpm 100 #define default_temp 280 #define default_rpm 50 /* Buttons */ #define sw_HA 10 #define sw_S 9 #define bt_SON 13 #define bt_HAON 14 #define bt_Sel 15 #define bt_Up 16 #define bt_Dwn 17 /* Bounce killers */ Bounce swHotAir = Bounce(); Bounce swSolder = Bounce(); Bounce SolderOnButton = Bounce(); Bounce HotAirOnButton = Bounce(); Bounce SelButton = Bounce(); Bounce UpButton = Bounce(); Bounce DwnButton = Bounce(); /* Hot Air */ /* states */ #define st_stop 0 #define st_work 1 #define st_pause 2 #define st_protection 3 //#define st_lowpower 4 byte hotair_state = st_stop; volatile uint16_t ots = 9990; volatile float HAPower = 0.0; uint16_t GetHotAirT = 0; uint16_t SetHotAirT = 100; byte SetHotAirRPM = 100; boolean HA_temp_stable = false; boolean need_Cooling = true; boolean scr_blink = false; byte ha_error = 0; boolean HA_prot_beep = false; boolean ha_f1 = false; boolean ha_f2 = false; uint32_t prevHAcontrol; /* HA PI regulator */ #define Kp 1.0 #define Ki 0.007 //0.003 //0.005 //0.05 int integral = 0; /* Soldering iron */ uint16_t GetSolderT = 0; uint16_t SetSolderT = 100; boolean S_temp_stable = false; boolean SolderON = false; boolean SolderProtect = false; int SPower = 0; //byte solder_state = st_stop; byte s_error = 0; uint32_t prevScontrol; boolean S_prot_beep = false; boolean s_f1 = false; boolean s_f2 = false; /* Solder P regulator */ #define sKp 50 uint16_t last_HotAirT, last_SolderT; byte last_RPM; /********************************************* MAIN PROCEDURES *********************************************/ void setup() { pinMode(3, INPUT_PULLUP); //Zero cross pin D5_Out; //pinSolder D5_Low; D4_Out; //pinSolderProt D4_Low; D7_Out; //pinHotAirProt D7_Low; D8_Out; //pinHotAir D8_Low; D12_Out; //pinBuzzer D12_Low; ButtonsSetup(); #ifdef NEED_GRAPH Serial.begin(9600); #endif lcd.begin(); lcd.backlight(); lcd.createChar(0, degree); lcd.createChar(1, arrow); Splash(); MemRead(); delay_ms(2000); initDisplay(); attachInterrupt(1, ZC, FALLING); } void loop() { ScanButtons(); /* Off-timer for HotAir, countdown with 1 min */ static uint32_t prevHAmillis = millis(); if (hotair_state == st_pause) { if (millis() - prevHAmillis > 60000) { prevHAmillis = millis(); if (HA_countdown > 1) { HA_countdown--; if (HA_countdown == 1) { Beep(100); //Beep, if 1 minute left } } else { hotair_state = st_stop; Beep(200); } } } else { prevHAmillis = millis(); } /* Off-timer for Solder, countdown with 1 min */ static uint32_t prevSmillis = millis(); if (need_S_countdown) { if (millis() - prevSmillis > 60000) { if (S_countdown > 1) { S_countdown--; if (S_countdown == 1) { Beep(100); //Beep, if 1 minute left } } else { MemSolder(); need_S_countdown = false; SolderON = false; Beep(200); } prevSmillis = millis(); } } else { prevSmillis = millis(); } /* Update LCD with 500ms interval */ static uint32_t prevDisplayMillis = millis(); if (millis() - prevDisplayMillis > 500) { scr_blink = ! scr_blink; prevDisplayMillis = millis(); DisplayUpdate(); /* Send data to Serial port */ #ifdef NEED_GRAPH if (SolderON || hotair_state == st_work) { Graph_count++; //Serial.print(Graph_count); //Serial.print(";"); } else { Graph_count = 0; } if (SolderON && hotair_state != st_work) { Serial.println(GetSolderT); } else if (!SolderON && hotair_state == st_work) { Serial.println(GetHotAirT); } #endif } WorkWithHotAir(); WorkWithSolder(); } /* HotAir working procedure */ void WorkWithHotAir() { /* Read the thermocouple value */ //GetHotAirT = A7_Read >> 1; #ifdef LM358 GetHotAirT = getOversampled_HA(); #else GetHotAirT = getOversampled_HA() >> 1; #endif switch (hotair_state) { case st_stop: { HotAirOff(); Cooling(); break; } case st_work: { /* Set the cooler rpm (convert from 30-100% to 80-255 PWM) */ analogWrite(pinFanPwm, map(SetHotAirRPM, min_rpm, max_rpm, 80, 255)); ha_error = HADoProtect(); /* Turn ON protection relay */ if (ha_error == 0) D7_High; /* Themperature PI regulator */ HA_PI(); /* If themperature was stable for 100 times (+/-2 degrees), then signalize about it */ int delta = ABS(SetHotAirT, GetHotAirT); static byte HAgood; if (!HA_temp_stable) { if (delta < 3) { HAgood++; if (HAgood == 100) { Beep(50); delay_ms(200); Beep(50); HAgood = 0; HA_temp_stable = true; } } else { HAgood = 0; } } else { if (delta > 5) { HA_temp_stable = false; } } break; } case st_pause: { HAPower = 0.0; HA_temp_stable = false; CalctImpulseControl(); Cooling(); ha_error = HADoProtect(); break; } case st_protection: { need_Cooling = true; break; } } //switch (state) } /* Solder working procedure */ void WorkWithSolder() { /* Read the thermoresistor value */ //GetSolderT = A6_Read >> 1; #ifdef LM358 GetSolderT = getOversampled_S(); #else GetSolderT = getOversampled_S() >> 1; #endif if ( SolderON ) { s_error = SDoProtect(); /* Turn ON relay */ if (s_error == 0) D4_High; /* themperature P regulator */ S_P(); /* If themperature was stable for 200 times loop (+/- 2 degrees) then signalize about it */ uint16_t delta = ABS(SetSolderT, GetSolderT); static byte Sgood; if (!S_temp_stable) { if (delta < 3) { Sgood++; if (Sgood == 200) { Beep(50); delay_ms(200); Beep(50); //Sgood = 0; S_temp_stable = true; } } else { Sgood = 0; } } else { if (delta > 5) { S_temp_stable = false; } } } else { SolderOff(); need_S_countdown = false; S_countdown = 1; } } /***************************************** END OF MAIN PROCEDURES ******************************************/ /****************************************** PROTECTION & ON-OFF ********************************************/ /* HotAir protection */ byte HADoProtect() { /* ------------------------------------------------------------------------------------------------------- */ /* Crytical protection: high overheat or thermocouple value is not valid or wire break */ if (GetHotAirT > max_hotair_temp + 20) { HAProtectionOut(); return 1; } /* ------------------------------------------------------------------------------------------------------- */ /* Crytical protection: thermocouple value is not valid or wires short circuit */ if (GetHotAirT < 10) { HAProtectionOut(); return 2; } /* ------------------------------------------------------------------------------------------------------- */ /* Overheat protection */ if (ha_f1 && GetHotAirT > SetHotAirT + 20) { ha_f1 = false; HAProtectionOut(); return 3; } if (ha_f2 && GetHotAirT < SetHotAirT + 15) { ha_f1 = true; ha_f2 = false; } /* ------------------------------------------------------------------------------------------------------- */ /* Deviation themperature protection +/- 10 degrees */ //if (HA_temp_stable) { //ha_f3 = true; //} // //if (ha_f3) { //if (GetHotAirT > SetHotAirT + 10) { //HAProtectionOut(); //return 4; //} // //if (GetHotAirT < SetHotAirT - 10) { //HAProtectionOut(); //return 5; //} //} /* ------------------------------------------------------------------------------------------------------- */ #ifdef HA_ADV_PROT_ON /* Advanced protection: the themperature falls down & power > 0 */ /* & */ /* Advanced protection: the themperature is not changed within 10 secs */ /* & */ /* Advanced protection: the themperature rise up & power < 0 */ if (!HA_temp_stable) { static uint16_t prev_t; static byte t_cnt = 0; static byte t_cnt2 = 0; static boolean ha_ctrl = true; if (ha_ctrl) { prev_t = GetHotAirT; ha_ctrl = false; prevHAcontrol = millis(); } if (!ha_ctrl && millis() - prevHAcontrol > 1000) { ha_ctrl = true; if (HAPower > 0.0) { /* themperature falls or not changed */ if (prev_t >= GetHotAirT && GetHotAirT < SetHotAirT) { t_cnt++; if (t_cnt == 10) { HAProtectionOut(); t_cnt = 0; return 6; } } else t_cnt = 0; } else { //HAPower == 0.0 /* themperature rise */ if (prev_t < GetHotAirT && GetHotAirT > SetHotAirT) { t_cnt2++; if (t_cnt2 == 5) { HAProtectionOut(); t_cnt2 = 0; return 7; } } else t_cnt2 = 0; } } } else prevHAcontrol = millis(); #endif /* ------------------------------------------------------------------------------------------------------- */ /* if everything is OK */ return 0; } /* Solder protection */ byte SDoProtect() { /* ------------------------------------------------------------------------------------------------------- */ /* Crytical protection: high overheat or thermoresistor value is not valid or wire break */ if (GetSolderT > max_solder_temp + 20) { SProtectionOut(); return 1; } /* ------------------------------------------------------------------------------------------------------- */ /* Crytical protection: thermoresistor value is not valid or wires short circuit */ if (GetSolderT < 10) { SProtectionOut(); return 2; } /* ------------------------------------------------------------------------------------------------------- */ /* Overheat protection */ if (s_f1 && GetSolderT > SetSolderT + 20) { s_f1 = false; SProtectionOut(); return 3; } if (s_f2 && GetSolderT < SetSolderT + 15) { s_f1 = true; s_f2 = false; } /* ------------------------------------------------------------------------------------------------------- */ /* Deviation themperature protection +/- 10 degrees */ //if (S_temp_stable) { //s_f3 = true; //} // //if (s_f3) { //if (GetSolderT > SetSolderT + 10) { //SProtectionOut(); //return 4; //} //Not required for soldering iron //if (GetSolderT < SetSolderT - 10) { //SProtectionOut(); //return 5; //} // } /* ------------------------------------------------------------------------------------------------------- */ #ifdef S_ADV_PROT_ON /* Advanced protection: the themperature falls down & power > 0 */ /* & */ /* Advanced protection: the themperature is not changed within 5 secs */ /* & */ /* Advanced protection: the themperature rise up & power < 0 */ if (!S_temp_stable) { static uint16_t prev_t; static byte t_cnt = 0; static byte t_cnt2 = 0; static boolean s_ctrl = true; if (s_ctrl) { prev_t = GetSolderT; s_ctrl = false; prevScontrol = millis(); } if (!s_ctrl && millis() - prevScontrol > 1000) { s_ctrl = true; if (SPower > 0) { /* themperature falls or not changed */ if (prev_t >= GetSolderT && GetSolderT < SetSolderT) { t_cnt++; if (t_cnt == 10) { SProtectionOut(); t_cnt = 0; return 6; } } else t_cnt = 0; } else { //SPower == 0.0 /* themperature rise */ if (prev_t < GetSolderT && GetSolderT > SetSolderT) { t_cnt2++; if (t_cnt2 == 5) { SProtectionOut(); t_cnt2 = 0; return 7; } } else t_cnt2 = 0; } } } else prevScontrol = millis(); #endif /* ------------------------------------------------------------------------------------------------------- */ /* everything is OK */ return 0; } /* Solder full off */ void SolderOff() { analogWrite(pinSolderPwm, 0); D5_Low; D4_Low; if (S_prot_beep) { S_prot_beep = false; Beep(1000); MemSolder(); } } /* HotAir full off */ void HotAirOff() { HAPower = 0.0; D8_Low; delay_ms(10); D7_Low; hotair_state = st_stop; if (HA_prot_beep) { HA_prot_beep = false; Beep(1000); MemHotAir(); } } /* Cooling the heater until the temperature is below 50 degrees */ void Cooling() { if (GetHotAirT >= 50 && need_Cooling) { analogWrite(pinFanPwm, 255); } else { analogWrite(pinFanPwm, 0); need_Cooling = false; } } /* internal procedure */ void set_ha_f() { boolean a = SetHotAirT >= GetHotAirT; ha_f1 = a; ha_f2 = !a; } /* internal procedure */ void set_s_f() { boolean a = SetSolderT >= GetSolderT; s_f1 = a; s_f2 = !a; } /* Solder protection */ void SProtectionOut() { SolderProtect = true; S_prot_beep = true; SolderON = false; SolderOff(); } /* HotAir protection out */ void HAProtectionOut() { analogWrite(pinFanPwm, 255); HA_prot_beep = true; HotAirOff(); hotair_state = st_protection; } /****************************************** END OF PROTECTION & ON-OFF *************************************/ /************************************************ OTHER ROUTINES *******************************************/ /* Read integer value */ int EEPROM_int_read(int addr) { byte raw[2]; for (byte i = 0; i < 2; i++) { raw[i] = EEPROM.read(addr + i); } int &num = (int&)raw; return num; } /* Write integer value */ void EEPROM_int_write(int addr, int num) { byte raw[2]; (int&)raw = num; for (byte i = 0; i < 2; i++) { EEPROM.write(addr + i, raw[i]); } } /* Read last parameters from memory */ void MemRead() { SetSolderT = EEPROM_int_read(0); if (SetSolderT < min_solder_temp || SetSolderT > max_solder_temp) { SetSolderT = default_temp; last_SolderT = SetSolderT; } SetHotAirT = EEPROM_int_read(4); if (SetHotAirT < min_hotair_temp || SetHotAirT > max_hotair_temp) { SetHotAirT = default_temp; last_HotAirT = SetHotAirT; } SetHotAirRPM = EEPROM_int_read(8); if (SetHotAirRPM < min_rpm || SetHotAirRPM > max_rpm) { SetHotAirRPM = default_rpm; last_RPM = SetHotAirRPM; } } /* Write last used solder themperature to memory */ void MemSolder() { if (last_SolderT != SetSolderT) { EEPROM_int_write(0, SetSolderT); last_SolderT = SetSolderT; } } /* Write last used HotAir themperature and fan r.p.m. to memory */ void MemHotAir() { if (last_HotAirT != SetHotAirT) { EEPROM_int_write(4, SetHotAirT); last_HotAirT = SetHotAirT; } if (last_RPM != SetHotAirRPM) { EEPROM_int_write(8, SetHotAirRPM); last_RPM = SetHotAirRPM; } } /* Sound procedure */ void Beep(uint16_t duration) { #ifdef PASSIVE_BUZZER tone(pinBuzzer, 1380, duration); #else D12_High; delay_ms(duration); D12_Low; #endif } /* HotAir oversampling function */ uint16_t getOversampled_HA() { uint32_t tmp = 0; for (byte z = 0; z < 64; z++) { tmp += A7_Read; } return tmp >> 6; } /* Solder oversampling function */ uint16_t getOversampled_S() { uint32_t tmp = 0; for (byte z = 0; z < 64; z++) { tmp += A6_Read; } return tmp >> 6; } /* Get absolute difference function */ uint16_t ABS(uint16_t a, uint16_t b) { if (a > b) { return (a - b); } return (b - a); } /****************************************** END OF OTHER ROUTINES ******************************************/ /*************************************** TRIAC CONTROL & AUTOMATHIC ****************************************/ /* Zero cross INT1 */ void ZC() { StartTimer1(HeaterOn, ots); RestartTimer1(); } /* Triac open impulse */ void HeaterOn() { if (HAPower > 0.0) { D8_High; delay_us(100); } D8_Low; StopTimer1(); } /* Calculate triac open delay */ void CalctImpulseControl() { ots = (uint16_t)(acos(HAPower / 50.0 - 1.0 ) * 9900.0 / pi); } /* HotAir PI regulator */ void HA_PI() { int err = SetHotAirT - GetHotAirT; float tmp_power = ((Kp * err) + (Ki * integral)); float max_power = map(SetHotAirT, min_hotair_temp, max_hotair_temp, 10.0, 60.0); if (tmp_power < max_power && tmp_power > 0.0) { integral += err; } HAPower = constrain(tmp_power, 0.0, max_power); CalctImpulseControl(); } /* Solder P regulator */ void S_P() { int TempPower = sKp * (SetSolderT - GetSolderT); SPower = constrain(TempPower, 0, 255); analogWrite(pinSolderPwm, SPower); } /* Solder P regulator with soft start */ //void S_P() { //int TempPower = sKp * (SetSolderT - GetSolderT); //byte maxPower = 255; //if (GetSolderT < 100) { //maxPower = 100; //} //SPower = constrain(TempPower, 0, maxPower); //analogWrite(pinSolderPwm, SPower); //} /************************************* END OF TRIAC CONTROL & AUTOMATHIC ***********************************/ /**************************************** INTERFACE CONTROLS & TIMERS **************************************/ /* Scan buttons */ void ScanButtons() { /* HotAir stand switch */ if (swHotAir.update() && hotair_state != st_stop) { if (swHotAir.fell()) { hotair_state = st_pause; need_Cooling = true; resetHotAirCountown(); } else { if (hotair_state == st_pause) { hotair_state = st_work; integral = 0; set_ha_f() ; } } Beep(50); } else if (hotair_state == st_work && D10_Read == LOW) { D7_High; hotair_state = st_pause; need_Cooling = true; resetHotAirCountown(); } /* Solder stand switch */ if (swSolder.update() && SolderON) { resetSolderCountdown(); Beep(50); } /* Solder "on-off" button */ if (SolderOnButton.update()) { if (SolderOnButton.read()) { SONbuttonState = false; } else { if (!SolderON) { SolderON = true; SolderProtect = false; Activate_S_countdown(); Graph_count = 0; selected_Mode = modeSolder; resetSolderStablePoint(); set_s_f(); } else { resetSolderCountdown(); } SONbuttonState = true; SONbuttonPressTime = millis(); Beep(50); } } if (SONbuttonState) { if ( millis() - SONbuttonPressTime >= 350 ) { //long press //нажатие кнопки SONbuttonPressTime = millis(); if (SolderON) { SolderON = false; MemSolder(); Beep(30); } } } /* HotAir "on-off" button */ if (HotAirOnButton.update()) { if (HotAirOnButton.read()) { HAONbuttonState = false; } else { if (hotair_state != st_work) { hotair_state = st_work; Graph_count = 0; selected_Mode = modeHotAir; need_Cooling = true; resetHotAirStablePoint(); set_ha_f(); integral = 0; } else { resetHotAirCountown(); } HAONbuttonState = true; HAONbuttonPressTime = millis(); Beep(50); } } if (HAONbuttonState) { if ( millis() - HAONbuttonPressTime >= 350 ) { //long press HAONbuttonPressTime = millis(); if (hotair_state == st_work || hotair_state == st_pause) { hotair_state = st_stop; need_Cooling = true; MemHotAir(); Beep(30); } } } /* Select button */ if (SelButton.update()) { if (SelButton.fell()) { Beep(50); (selected_Mode < modeFanPWM) ? (selected_Mode++) : (selected_Mode = modeSolder); } } /* UP button */ static boolean short_press_flag = false; if (UpButton.update()) { if (UpButton.rose()) { UPbuttonState = false; short_press_flag = false; } else { switch (selected_Mode) { case modeSolder: if (SetSolderT < max_solder_temp) { SetSolderT += 5; } resetSolderStablePoint(); set_s_f(); resetSolderCountdown(); break; case modeHotAir: if (SetHotAirT < max_hotair_temp) { SetHotAirT += 5; } break; case modeFanPWM: if (SetHotAirRPM < max_rpm) { SetHotAirRPM += 5; } break; } if (selected_Mode > 1) { set_ha_f(); resetHotAirStablePoint(); resetHotAirCountown(); } UPbuttonState = true; short_press_flag = true; UPbuttonPressTime = millis(); Beep(50); } } /* UP button (long press) */ if (UPbuttonState) { if ( millis() - UPbuttonPressTime >= 500 ) { UPbuttonPressTime = millis(); byte step = 10; if (short_press_flag) { step = 5; short_press_flag = false; } switch (selected_Mode) { case modeSolder: SetSolderT += step; if (SetSolderT > max_solder_temp) SetSolderT = max_solder_temp; resetSolderStablePoint(); set_s_f(); resetSolderCountdown(); break; case modeHotAir: SetHotAirT += step; if (SetHotAirT > max_hotair_temp) SetHotAirT = max_hotair_temp; break; case modeFanPWM: SetHotAirRPM += step; if (SetHotAirRPM > max_rpm) SetHotAirRPM = max_rpm; break; } if (selected_Mode > 1) { set_ha_f(); resetHotAirStablePoint(); resetHotAirCountown(); } } } /* Down button */ if (DwnButton.update()) { if (DwnButton.read()) { DWNbuttonState = false; short_press_flag = false; } else { switch (selected_Mode) { case modeSolder: if (SetSolderT > min_solder_temp) { SetSolderT -= 5; } resetSolderStablePoint(); set_s_f(); resetSolderCountdown(); break; case modeHotAir: if (SetHotAirT > min_hotair_temp) { SetHotAirT -= 5; } break; case modeFanPWM: if (SetHotAirRPM > min_rpm) { SetHotAirRPM -= 5; } break; } if (selected_Mode > 1) { set_ha_f(); resetHotAirStablePoint(); resetHotAirCountown(); } DWNbuttonState = true; short_press_flag = true; DWNbuttonPressTime = millis(); Beep(50); } } /* Down button (long press) */ if (DWNbuttonState) { if ( millis() - DWNbuttonPressTime >= 500 ) { DWNbuttonPressTime = millis(); byte step = 10; if (short_press_flag) { step = 5; short_press_flag = false; } switch (selected_Mode) { case modeSolder: SetSolderT -= step; if (SetSolderT < min_solder_temp) SetSolderT = min_solder_temp; resetSolderStablePoint(); set_s_f(); resetSolderCountdown(); break; case modeHotAir: SetHotAirT -= step; if (SetHotAirT < min_hotair_temp) SetHotAirT = min_hotair_temp; break; case modeFanPWM: SetHotAirRPM -= step; if (SetHotAirRPM < min_rpm) SetHotAirRPM = min_rpm; break; } if (selected_Mode > 1) { set_ha_f(); resetHotAirStablePoint(); resetHotAirCountown(); } } } } /* Buttons initialise */ void ButtonsSetup() { pinMode(sw_HA, INPUT_PULLUP); swHotAir.attach(sw_HA); swHotAir.interval(50); pinMode(sw_S, INPUT_PULLUP); swSolder.attach(sw_S); swSolder.interval(50); pinMode(bt_SON, INPUT_PULLUP); SolderOnButton.attach(bt_SON); SolderOnButton.interval(5); pinMode(bt_HAON, INPUT_PULLUP); HotAirOnButton.attach(bt_HAON); HotAirOnButton.interval(5); pinMode(bt_Sel, INPUT_PULLUP); SelButton.attach(bt_Sel); SelButton.interval(10); pinMode(bt_Up, INPUT_PULLUP); UpButton.attach(bt_Up); UpButton.interval(5); pinMode(bt_Dwn, INPUT_PULLUP); DwnButton.attach(bt_Dwn); DwnButton.interval(5); } /* internal procedure */ void resetHotAirStablePoint() { HA_temp_stable = false; } /* internal procedure */ void resetSolderStablePoint() { S_temp_stable = false; } /* Reset HotAir countdown */ void resetHotAirCountown() { HA_countdown = HA_sleeptime; } /* Reset Solder countdown */ void resetSolderCountdown() { S_countdown = S_sleeptime; } /* Activate Solder countdown procedure */ void Activate_S_countdown() { need_S_countdown = true; S_countdown = S_sleeptime; } /**************************************** INTERFACE CONTROLS & TIMERS **************************************/ /************************************************* DISPLAY *************************************************/ /* "Hello" screen */ void Splash() { lcd.clear(); #ifdef LCD_1602 lcd.setCursor(1, 0); lcd.print(F("Solder Station")); lcd.setCursor(3, 1); #else lcd.setCursor(2, 1); #endif lcd.print(F("RUSLAN ")); lcd.print(FIRMWARE_VERSION); } /* Set LCD design */ void initDisplay() { lcd.clear(); #ifdef LCD_1602 #else lcd.setCursor(11, 1); lcd.print(F("Set")); lcd.setCursor(16, 1); lcd.print(F("Act")); //lcd.setCursor(0, 0); //lcd.print(F("W")); #endif } /* Update LCD */ void DisplayUpdate() { #ifdef LCD_1602 lcd.setCursor(0, 0); lcd.print (F("S:")); //lcd.setCursor(1, 0); //lcd.print(bspace); lcd.setCursor(0, 0); if (SolderProtect) { lcd.print(F("!")); lcd.print(s_error); } else if (SolderON) { lcd.print(S_countdown); } lcd.setCursor(3, 0); lcd.print(bspace); lcd.setCursor(3, 0); lcd.print(SetSolderT); lcd.write((byte)0); byte pos; pos = GetPos(GetSolderT); lcd.setCursor(8, 0); lcd.print(bspace); lcd.setCursor(8+pos, 0); if (GetSolderT > 505) { lcd.print(F("---")); } else { lcd.print(GetSolderT); } lcd.write((byte)0); lcd.setCursor(0, 1); lcd.print (F("H:")); //lcd.setCursor(1, 1); //lcd.print(bspace); lcd.setCursor(0, 1); switch (hotair_state) { case st_stop: { break; } case st_work: { if (HA_temp_stable) { lcd.print(F(" *")); } else { lcd.print(F(" :")); } break; } case st_pause: { lcd.print(HA_countdown); break; } case st_protection: { lcd.print(F("!")); lcd.print(ha_error); break; } } pos = GetPos(SetHotAirT); lcd.setCursor(3, 1); lcd.print(bspace); lcd.setCursor(3+pos, 1); lcd.print(SetHotAirT); lcd.write((byte)0); lcd.setCursor(8, 1); lcd.print(bspace); lcd.setCursor(8, 1); if (GetHotAirT > 505) { lcd.print(F("---")); } else { pos = GetPos(GetHotAirT); lcd.setCursor(8+pos, 1); lcd.print(GetHotAirT); } lcd.write((byte)0); lcd.setCursor(13, 1); lcd.print(bspace); lcd.setCursor(13, 1); pos = GetPos(SetHotAirRPM); if (need_Cooling && hotair_state != st_work) { lcd.print(F("100%")); } else { lcd.setCursor(13+pos, 1); lcd.print(SetHotAirRPM); lcd.print(F("%")); } lcd.setCursor(2, 0); lcd.print(F(" ")); lcd.setCursor(2, 1); lcd.print(F(" ")); lcd.setCursor(12, 1); lcd.print(F(" ")); switch (selected_Mode) { case modeSolder: { lcd.setCursor(2, 0); break; } case modeHotAir: { lcd.setCursor(2, 1); break; } case modeFanPWM: { lcd.setCursor(12, 1); break; } } lcd.write((byte)1); //if (hotair_state == ha_pause) { //(scr_blink) ? (lcd.backlight()) : (lcd.noBacklight()); //} else { //lcd.backlight(); //} if (hotair_state == st_pause) { lcd.setCursor(2, 1); lcd.blink_on(); } else { lcd.blink_off(); } #endif } /* Get print position */ byte GetPos(uint16_t number) { if (number >= 100) { return 0; } else if (number < 10) { return 2; } return 1; }При отключенном из разъема паяльнике, что показывает?
подскажите что я сделал неправильно
прбелы тоесть чёрточки
И нагреватель с термодатчиком при монтаже не перепутаны?
нагреватель 3.8 ом датчик 40.7 ом
схема для паяльника собрал по этой схемено не работает
Здравствуйте а можете скинуть файл вашего проекта спасибо
а то что делаю не дам ладу
Добрый вечер. Вы писали что Можно применить и что-то проще, типа LM358, но в коде придётся сделать небольшое исправление. какое исправление нужно делать ,а то не дам ладу каналу паяльника.
Александр, при желании помочь вам разобраться, если вы сами этого действительно хотите, и потратить свое личное время не впустую, у любого, кто НЕ находится рядом с вами над вашим изделием, возникнут вопросы для понимания ситуации, тем более дистанционно, "с нуля". Посему воспринимайте простые вопросы адекватно. Ок? Для примера, когда-то в юности, году так в 1984, я разобрал пол телевизора, хотя причина оказалась в частичном дефекте выключателя питания, контакт был, но под нагрузкой, при небольшом нагреве размыкался ;-))
Поэтому я не намерен снова повторять ту ошибку юного радиолюбителя.
0. Читаем внимательно файл "Настройка усилителей термодатчиков.txt" (прикрепил внизу, на всякий случай) и перезаливаем прошивку с отключенными защитами:
отрывок:
1. Я уже спрашивал о том, что показывает при отключенном паяльнике, и не перепутаны ли в разъеме контакты нагревателя и терморезистора, не просто так что мне нефиг делать, поумничать. Вы ответили только данными по сопротивлению, и все, из чего я только понял что вы понимаете что у них разное R, но не понял как и где вы замеряли. На разъеме провода отключенного паяльника? Тогда вы не ответили на мой вопрос. Или при подключенном паяльнике измерили на плате, на входе в усилитель? Тогда правильно, но я не экстрасенс, что бы понять это по вашему ответу, и двинуться дальше. А если при отсоединенном паяльнике показывает ту же температуру, то это указывает на другое. Много уходит времени на выяснение вашей же ситуации при неполном, непонятном ответе. (уверен, что вы уже проверили работоспособность термодатчика паяльника, измерив ↑R на разъеме провода паяльника при нагреве керамики?)
2. После этого, если все правильно, давайте проверим работу усилителя с ЛМ358. Отключи паяльник из разъема, и на вход усилителя подключаем переменное сопротивление 100 ом, установленное на 50ом. При ↑ R, должно ↑ V на выходе ОУ по вашей схеме лапа №1. Я не использую ЛМ и не хочу морочиться, но насколько помню, у неё Vвых макс.= 0,5Vпитания, при отпаянном выводе резистора 10кОм от 25 лапы (А6) АрдуНаНо. Если все в порядке, паяем обратно. В принципе при рабочем усилителе на дисплее t° тоже должна ↑. (Если так, ползем от платы наружу, через шлейф, разъем и до нагревателя, в этом случае обычно перепутаны нагреватель и датчик, но ведь мы уже это проверили? ;-)) Проверяем далее, что на 25 лапе (А6) АрдуНаНо. Если все в порядке, V с усилителя есть (или не в порядке, замкнуто на массу), но (и) t° на дисплее не ↑, отключи выход усилителя ФЕНА от АрдуНаНо, лапа №26 (А7), отпаяв вывод резистора 10кОм, и отключи выход усилителя паяльника от АрдуНаНо, лапа №25 (А6), тоже отпаяв вывод резистора 10кОм, подключи его, усилитель паяльника, с резистора 10кОм, вместо усилителя фена на лапу №26 (А7) АрдуНаНо, т.е. на проверенный в работе канал фена, и посмотри изменение данных t° фена на дисплее при изменении переменного сопротивления 100 ом на входе усилителя, или при нагреве подключенного паяльника. Порт АрдуНаНо 25 лапа (А6) может тоже оказаться сгоревшим, для этого и проверяем.
Делаем пока так, если раньше не было сделано. Исключаем, двигаемся дальше.
Расписал подробно. Знал бы тебя, к примеру что достаточно написать "отключи выход усилителя ФЕНА", вместо подробного изложения, мне было бы конечно проще.
"Настройка усилителей термодатчиков.txt"
Не нужно крутить "начало" при нагретом паяльнике. ТОЛЬКО при остывшем до комнатной.
1. Пока канал не настроен, дополнительные защиты нужно отключить.
[quote=aleksandr.butenko]
Добрый вечер. Вы писали что Можно применить и что-то проще, типа LM358, но в коде придётся сделать небольшое исправление. какое исправление нужно делать ,а то не дам ладу каналу паяльника
Все что нужно для 328 у вас в коде отмеченно. А именно строка 27. Выбрана lm328. Т.е. коэф. умножения для нее будет 2, по причине формулы вых. напряжения (0.5 Vcc), вроде.
канал паяльника который не работал наладил ночью сделал так нагрел феном термистор до 300 гр. и начал крутить подстрочники и всё заработало теперь буду настраивать дальше следуя вашей инструкции
спасибо за рекомендации буду вечером подключать 24в и220 и настраивать дальше
поздравляю. Так понял прошивка была залита с включенными защитами до первого включения и настройки? Теперь по рекомендациям авторов настраивайте, по текстовому файлу. (это их рекомендации). Я сам пока не доделал станцию с этой же платой. нет времени. разбираюсь с вариантом на энкодере и с часами. заморочки с библиотеками. не могу пока заставить работать вариант с другими часами. Удачи. отпишитесь по результатам. порадуемся вместе ;-))
Вариант с энкодером от MadTux нормально работает. Проверено неоднократно. Часы выброшены нахрен. Ибо нафиг не нужны. Плата, что выше мелькала, моей разводки , проверена также неоднократно. Все проблемы здесь уже обсуждались неоднократно. Если кому-то лень прочитать десяток первых страниц форума, то это его проблемы...
Привет Алекс. Не хотел беспокоить с вопросами. Плату из ваших старых запасов собрал, с кнопками на макете запускается. Но я хочу с энкодером. Корпус красивый прикупил, но довольно компактный, неудобно будет с кнопками... Часы на другом чипе запустить не удалось, упирается в некорректную работу библиотек, особенно санрайз.... Выкорчевывал часы из кода. Санрайз выдрал, не ругается, меню переделывал, с остальным (часами) не получается, компиляция с ошибками, в программировании на уровне дилетанта, изучаю. В том архиве, что вы мне сбрасывали, не нашел прошивки с энкодером без часов, в архиве от MadTux тоже. Форум изучил, но повторю, с программированием туго. Да и 90% выкладывавшихся материалов по ссылкам, удалены. Если вы поможете с этой прошивкой, сбросите, буду премного благодарен. Спасибо за внимание! ub3b_radio(&)yahoo.com
Не помогу. Я на этот проект уже давно забил. И все материалы пролюбил. Ну не все, но большую часть. Программист из меня, как пуля из дерьма...
Выдрать модуль часов и удалить их отображение. Самый простой вариант.
Ок, этим и занимаюсь, поборюсь, но победа похоже, будет не за мной... Наверно буду или модуль часов на "правильной" микросхеме заказывать, либо делать сенсорные кнопки за лицевой панелью. А жаль... MadTux, заразка, видимо с часами разбирался, и приКуевертил к паяльнику и смылся. Ладно часы, так ещё и расчёт рассвета-заката в зависимости от координат, нафиг это всё паяльнику!!! :-)) Интересно, здесь на форуме ещё кто-нибудь остался, кто может помочь?
привет Andy_UB3B вот адрес на прошывку https://fex.net/ru/s/ym4brpz только у меня вылетает ошибка по библиотеке Sunrise.h
Данный код адаптирован под управление только одним энкодером.
* В качестве "плюшки" добавлен модуль часов реального времени.
* Адаптировал MaD-TuX.
если получится отпишись
https://fex.net/ru/s/lzzsxrf а это печатка
... только у меня вылетает ошибка по библиотеке Sunrise.h
Данный код адаптирован под управление только одним энкодером.
* В качестве "плюшки" добавлен модуль часов реального времени.
* Адаптировал MaD-TuX.
Да есть у меня вся эта ... с "плюшками", нахрен бы они упали!
И будет вылетать ошибка пока не найдешь ту библиотеку, что М. использовал. А если он её ещё под себя изменил, то Придётся по библиотеке менять команды. Я его выкорчевал, борюсь с часами. И часы DS3231 ибо похоже команды под них, а не для DS1307. Где-то видимо недогоняю в другом, ладно, х_с ним, разберусь, или на кнопках сделаю без будильника. Повелся на защиты в схеме, понравилось, а то что проект уже подох и хрен кто поможет, не учёл. Алекс1978 остался, и FagotBah человеки! Хотел же другую делать...
Да и посмотри в коде, ссылку на который ты мне прислал, строки 40 и 122. Не настораживает?
Ссылка на станцию от MaD-TuX (полный архив)
https://fex.net/ru/s/lznbytv
Здравствуйте.
Подскажите, у вас его прошивка работала? Есть ли у вас файлы библиотек, работающих на ней?
А без часов с энкодером случаем не завалялось?
Подсобите, плиз, если возможно!
Спасибо за внимание
я не программист
mr.nikon Приветствую! А по прошивкам с энкодером помочь не можете? Без часов желательно, или помочь выкорчевать. (Я не программер, только начинаю, на старости ;-)) Или с работающими здесь библиотеками. А то я не могу заставить работать и энкодер. кнопку запустил, а вращения нет. Ошибку не выдает при компиляции, но не крутит... Перепробовал уже кучу библиотек и энк., энкодеры рабочие...
Спасибо за внимание!
я не программист
Я тоже, но разные часы, бросается в глаза DS3231 и DS1307. похоже заточено под первые