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
propell_ant wrote:
felyx wrote:Если уже есть такое устройство,просьба написать где оно.Спасибо.
на вскидку - http://hardlock.org.ua/viewtopic.php?f=9&t=10&p=9822#p9823
Это совсем не то что ему нужно. Ему нужны две температуры регулирования - первая (например +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, спасибо,завтра попробую и отпишусь :good:

Re: Термостат ∆T=0,1°C

Posted: 25 Sep 2015 11:27
by propell_ant
IYra, а что ж не вот так, вместо

Code: Select all

Temp = 1100 + DeltaT;
написать

Code: Select all

Temp = T_LoadOn - DeltaT;
то есть гистерезис как бы расширяется вниз, ниже уставки. Алгоритм переключения станет таким:
падение температуры:
от 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, не, не будет работать, т.к. в программе все реализовано через прерывания и таймеры. Надо подумать. А в теме про инкубатор похожего нету?