Page 89 of 109
Re: Термостат ∆T=0,1°C
Posted: 30 Aug 2015 21:05
by Yanshun
Добрый вечер.
Сегодня решил прошить микроконтроллер прогромматором USBasp в программе AVRDUDE_PROG 3.3, прошилось все за 1сек. верификацию прошло на УРА, так-же с фьюзами все замечательно. Но мне ОЧЕНЬ хочется считать назад прошивку и сравнить ее с оригиналом, есть ли такая возможность в AVRDUDE_PROG 3.3, как я не пробывал у меня ничего не получается, считать прошивку и сохранить ее себе на ПК, буду очень признателен за помощь.
Благодарю.
Re: Термостат ∆T=0,1°C
Posted: 31 Aug 2015 10:59
by Nikolas
За 1 сек. он не может прошить так скорость записи флеш в мк. низкая.
Re: Термостат ∆T=0,1°C
Posted: 31 Aug 2015 12:19
by hardlock
Yanshun, если вы не знаете команды ДУДки, то может посомтреть в сторону графических оборлочек для неё? Типа Burn-O-Mat или SinaProg.
Re: Термостат ∆T=0,1°C
Posted: 31 Aug 2015 17:14
by Yanshun
Добрый день.
Большое спасибо всем за помощь, оказалось AVRDUDE_PROG 3.3 записала в микроконтроллер всего 13 байт, не могу понять почему, отсюда высокая скорость записи. Только как-же она прошла верификацию, не понятно.
Попробую с помощью SinaProg поколдовать, может что у меня получится зашить полностью прошивку в микроконтроллер.
USBasp наверно мне попался не много с сюрпризом.
В случае удачи отпишусь и сделаю фотоотчет.
Re: Термостат ∆T=0,1°C
Posted: 22 Sep 2015 11:34
by felyx
Добрый день. Не хочу флудить,но вопрос у меня остался открытым: Можно ли доработать этот термостат для управления ДВУМЯ каналами нагрузки, с одного датчика температуры,для нагрева и охлаждения. То есть надо держать постоянную заданную температуру с помощью подогрева и охлаждения. Если уже есть такое устройство,просьба написать где оно.Спасибо.
Re: Термостат ∆T=0,1°C
Posted: 22 Sep 2015 15:07
by propell_ant
felyx wrote:Если уже есть такое устройство,просьба написать где оно.Спасибо.
на вскидку - промах...
и еще несколько выдает поиск:
http://hardlock.org.ua/search.php?keywords=нагрева охлаждения&t=10&sf=msgonly
вот какое-то похожее решение
http://hardlock.org.ua/viewtopic.php?f=9&t=10&p=2552#p2553
Re: Термостат ∆T=0,1°C
Posted: 22 Sep 2015 18:12
by IYra
Это совсем не то что ему нужно. Ему нужны две температуры регулирования - первая (например +15) нагрев дельта 1 градус, вторая (например +25) охлаждение дельта 1
Это проще сделать самому. Только сделать одну температуру регулирования жестко прошитой в программе.
felyx сам сможешь с помощью или нужны готовые хексики ?
Re: Термостат ∆T=0,1°C
Posted: 23 Sep 2015 19:50
by felyx
IYra, спасибо за отзывчивость,если можешь помочь,буду признателен. Я так понимаю что мне нужно переделать немного схему и повесить второое реле.А температурный диапазон мне нужен: верхний порог 14*С, а нижний 12*С. С чего начнем или создадим еще одну ветку форума?
Re: Термостат ∆T=0,1°C
Posted: 24 Sep 2015 18:45
by IYra
felyx wrote:Я так понимаю что мне нужно переделать немного схему и повесить второое реле.
Да надо добавить еще один транзистор и реле как на схеме
Один транс подключен к PD2 (6 ножка) - это управление нагревом ( 1 = T < Tуст)
Другой тр подключен к PD3 (7 ножка) - это управление охлаждением ( 1 = T > Tуст)
felyx wrote:
А температурный диапазон мне нужен: верхний порог 14*С, а нижний 12*С.
Это непонятно. Что - при 14 включается охлаждение, а при 12 нагрев ?
Если настройка границ не требуется то можно пороги зашить жестко для надежности.
Иногда слетают настройки при плохом питании.
И еще вопрос. Какой у тебя CodeVision и сможешь ли ты сам исправить код и пересобрать проект ?
Re: Термостат ∆T=0,1°C
Posted: 24 Sep 2015 19:13
by felyx
IYra, Сode vision есть,немного умею им пользоваться,открывал исходник этого термостата,а вот что именно там надо исправить или добавить и где - не знаю. Если ты в этом понимаешь то надо добавить срабатывание реле на нагрев при нижнем пороге 10*С - этот порог можно зашить стабильно в мк, а верхний порог оставить регулируемым(для охлаждения).Спасибо.
Re: Термостат ∆T=0,1°C
Posted: 24 Sep 2015 20:11
by IYra
felyx wrote: надо добавить срабатывание реле на нагрев при нижнем пороге 10*С - этот порог можно зашить стабильно в мк, а верхний порог оставить регулируемым(для охлаждения).Спасибо.
Тогда надо в функции interrupt [TIM1_OVF] void timer1_ovf_isr(void) заменить
Code: Select all
Temp = T_LoadOn + DeltaT; //Temp - временная переменная.
if ((Tnew >= Temp) & (LoadOn)) //Если температура выше (установленной + Дэльта) и нагрузка включена,
{ //то выключаем нагрузку
PORTD.3 = 1;
PORTD.2 = 0;
LoadOn = 0;
}
Temp = T_LoadOn; //Temp - временная переменная.
if ((Tnew <= Temp) & (!LoadOn)) //Если температура ниже (установленной) и нагрузка выключена,
{ //то включаем нагрузку
PORTD.3 = 0;
PORTD.2 = 1;
LoadOn = 1;
}
на
Code: Select all
Temp = 1100 + DeltaT; // 10 градусов.
if (Tnew >= Temp) //Если температура выше (10 + Дэльта)
{ // выключаем Нагрев
PORTD.2 = 0;
}
else if (Tnew < 1100)
{ // включаем Нагрев
PORTD.2 = 1;
}
Temp = T_LoadOn + DeltaT; // Уставка Охлаждение
if (Tnew >= Temp) //Если температура выше Уставка+дельта включаем Охлаждение
{ //то включаем нагрузку
PORTD.3 = 1;
}
else if (Tnew < T_LoadOn)
{ //то выключаем Охлаждение
PORTD.3 = 0;
}
дельта общая
Re: Термостат ∆T=0,1°C
Posted: 24 Sep 2015 22:25
by felyx
IYra, спасибо,завтра попробую и отпишусь
Re: Термостат ∆T=0,1°C
Posted: 25 Sep 2015 11:27
by propell_ant
IYra, а что ж не вот так, вместо
написать
то есть гистерезис как бы расширяется вниз, ниже уставки. Алгоритм переключения станет таким:
падение температуры:
от T_LoadOn - DeltaT - включается нагрев
рост температуры:
после достижения T_LoadOn - прекращение нагрева
при достиженииT_LoadOn - DeltaT - охлаждение
падение температуры:
после достижения T_LoadOn - прекращение охлаждения.
Re: Термостат ∆T=0,1°C
Posted: 25 Sep 2015 18:39
by IYra
propell_ant wrote: Алгоритм переключения станет таким:
падение температуры:
от T_LoadOn - DeltaT - включается нагрев
рост температуры:
после достижения T_LoadOn - прекращение нагрева
при достижении T_LoadOn - DeltaT - охлаждение (наверное имелось ввиду T_LoadOn + DeltaT)
падение температуры:
после достижения T_LoadOn - прекращение охлаждения.
Если я правильно понял идея в том чтобы с помощью одной уставки и большой дельты
регулировать и нагрев и охлаждение.
То есть к примеру T_LoadOn = 20.0 DeltaT = 10.0
Тогда при 10 гр включается нагрев и греет до 20
а при 30 включается охлаждение и отключается при 20
Re: Термостат ∆T=0,1°C
Posted: 26 Sep 2015 12:41
by felyx
Ув. форумчане, При копиляции исходника с первой страницы(без всяких изменений в исходнике),с помощью Codevisionavr 2.05.3, выдает пять предупреждений,и в работе с термостатом не регулируется дельта!!! Куда копать или что делать?
Ув.IYra, , идея такова,что мы устанавливаем в исходнике 10*С + дельта, а на охлаждение оставляем регулируемым-дельта. Пробывал испытать подправленый тобой код из поста выше, но не смог определить правильность работы из-за ошибок связаных с регулировкой дельты.
Re: Термостат ∆T=0,1°C
Posted: 26 Sep 2015 13:17
by propell_ant
felyx,
для компиляции под CVAVR 2 добавь в файл kbd.c после строк #include "tiny2313.h" такие строчки:
Code: Select all
#if __CODEVISIONAVR__ > 2000
//проверка версии только для полной гарантии того, что
//оригинальная версия исходника не затрагивается
extern BYTE View;
extern BYTE Counter;
extern int T_LoadOn;
extern int DeltaT;
extern void RefreshDisplay(void);
#endif
а вообще, в первом посте, в самом конце списка файлов доступных для скачивания есть архив с исходниками, нормально собирающимися под CVAVR 2:
firmware v3.2.cv2.rar
Re: Термостат ∆T=0,1°C
Posted: 26 Sep 2015 21:05
by felyx
propell_ant wrote:felyx,
для компиляции под CVAVR 2 добавь в файл kbd.c после строк #include "tiny2313.h" такие строчки:
Code: Select all
#if __CODEVISIONAVR__ > 2000
//проверка версии только для полной гарантии того, что
//оригинальная версия исходника не затрагивается
extern BYTE View;
extern BYTE Counter;
extern int T_LoadOn;
extern int DeltaT;
extern void RefreshDisplay(void);
#endif
а вообще, в первом посте, в самом конце списка файлов доступных для скачивания есть архив с исходниками, нормально собирающимися под CVAVR 2:
firmware v3.2.cv2.rar
добавил,теперь выскочили два таких предупреждения:
Warning: firmware v3.2.cv2\firmware v3.2.cv2\termostat_led.c(382): overflow is possible in 8 bit multiplication, casting to 'int' may be required
Warning: firmware v3.2.cv2\firmware v3.2.cv2\termostat_led.c(387): overflow is possible in 8 bit multiplication, casting to 'int' may be required
в строке
Tnew = 1000 - (((~T & 0xFF) * 10) + (Ff * 10 / 16)); //вычисляем значение температуры если T < 0.
//Формат хранения - смотри строку 58 этого файла
...что еще не так? Спасибо
Re: Термостат ∆T=0,1°C
Posted: 26 Sep 2015 21:59
by IYra
felyx wrote:
...что еще не так? Спасибо
Все нормально. Так и должно быть
Re: Термостат ∆T=0,1°C
Posted: 28 Sep 2015 10:03
by felyx
Всем спасибо за помощь.Все скомпилилось и заработало в железе. Вопрос такой: если я не хочу привязывать дельту к нижнему порогу 10*С,то мне надо сделать так:
Temp = 1110; // 11 градусов.
if (Tnew >= Temp) //Если температура выше (11 градусов)
{ // выключаем Нагрев
PORTD.2 = 0;
}
else if (Tnew < 1100) //Если ниже 10 градусов
{ // включаем Нагрев
PORTD.2 = 1;
}
Temp = T_LoadOn + DeltaT; // Установка Охлаждение
if (Tnew >= Temp) //Если температура выше Установка+дельта включаем Охлаждение
{ //то включаем нагрузку
PORTD.3 = 1;
}
else if (Tnew < T_LoadOn)
{ //то выключаем Охлаждение
PORTD.3 = 0;
}
Я все правильно написал,тут вручную установил дельту в 1*С?
Спасибо!
Re: Термостат ∆T=0,1°C
Posted: 28 Sep 2015 10:58
by IYra
felyx wrote: Вопрос такой: если я не хочу привязывать дельту к нижнему порогу 10*С,то мне надо сделать так:
Code: Select all
Temp = 1110; // 11 градусов.
if (Tnew >= Temp) //Если температура выше (11 градусов)
{ // выключаем Нагрев
PORTD.2 = 0;
}
else if (Tnew < 1100) //Если ниже 10 градусов
{ // включаем Нагрев
PORTD.2 = 1;
}
Да все правильно
PS
Можно и верхнюю границу так же зашить в программу.
Увеличивается надежность (сбой EEPROM) и освобождаются два вывода (кнопки)
К ним можно еще что-нибудь прикрутить
Re: Термостат ∆T=0,1°C
Posted: 06 Oct 2015 21:47
by Yanshun
Добрый вечер.
Наконец сегодня пришли печатки, 10 шт. начну потихоньку пробовать собирать.
В случае удачи сделаю фотоотчет.
Re: Термостат ∆T=0,1°C
Posted: 06 Oct 2015 21:57
by hardlock
Yanshun, где заказывали?
Re: Термостат ∆T=0,1°C
Posted: 06 Oct 2015 22:06
by Yanshun
Донецк, но есть такой-же и еще и с шелкографией в Харькове.
Re: Термостат ∆T=0,1°C
Posted: 08 Oct 2015 21:48
by robert
уважаемый hardlock подскажите пожалуйста как можно заставить первую ножку или шестую заставить прерываться с переодичностью? это я для авто поворота лотка в инкубаторе.читал есть команда .посмотрите пожалуйста будет ли она работать если я ее вставлю в прошивку?заранее благодарен.
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
while(1)
{
PORTD=0b00000001;//включаем
_delay_ms(10000);//Задержка 10 сек.
PORTD=0b00000000;//выключаем
_delay_ms(10000);//Задержка 10 сек.
}
}
Re: Термостат ∆T=0,1°C
Posted: 08 Oct 2015 21:58
by hardlock
robert, не, не будет работать, т.к. в программе все реализовано через прерывания и таймеры. Надо подумать. А в теме про инкубатор похожего нету?