Страница 1 из 1
Вопрос про термостат для котла.
Добавлено: Вс янв 15, 2012 23:44:08
rjn
Здравствуйте дамы и господа, понадобился мне термостат для нового котла BAXI в квартире, уж больно много жрет газа, сказано сделано, но вот беда так как я не силен в программировании, ну уж очень хотелось написать программу самому так сказать для общего развития. Взял завалявшийся МК atmega 8515 и датчик DS18B20 плюс LCD 16x4 наваял программу часть из библиотеки, часть с интернета, часть своими силами и вот получилось вроде все работает но как то не так и чего то не хватает, а не хватает десятых или даже сотых от датчика, как сделать не знаю. Так решил выложить на форум может кто поправит исходник. Короче вот простой термостат который у меня работает уже месяц.
Re: помогите с программой для термостата на atmega и ds18b20
Добавлено: Вс янв 15, 2012 23:56:55
phenomen
Эта тема вам должна помочь.
Re: помогите с программой для термостата на atmega и ds18b20
Добавлено: Вс янв 15, 2012 23:58:01
ploop
Сотых вы тут не получите, у него точность ±0.5°
Хотя сам датчик может дать до сотых с шагом 0,0625, т.е. по 0,06 прыгать будет. Но смысла никакого нет. Поэтому округляют до десятых.
А вообще, научитесь пользоваться
поиском
Вопрос про термостат
Добавлено: Пн янв 16, 2012 03:35:00
rjn
а по моему это не помощь, а отписка.
то что у датчика точность ±0.5° это еще до создания проекта читается., и то что сам датчик может дать до сотых с шагом 0,0625 это тоже везде написано
а смысл есть еще какой, вы же уважаемый проект мой даже и не посмотрели?
смысл такой что при срабатывании верхний - нижний порог допустим 21°-23° все нормально но когда разрыв в один градус 21°-22° то реле на включение котла постоянно щелкает. Вот в чем вопрос который я так и не успел задать в моей предыдущей теме (помогите с программой для термостата на atmega и ds18b20) которую закрыли так и не дав даже мяукнуть.
да и поиском я умею пользоваться.
Re: все тот же вопрос про термостат
Добавлено: Пн янв 16, 2012 04:24:34
rjn
ну и так вообще просил посмотреть саму программу. может мне лучше и не стоит писать свое, а так всю жизнь и пользоваться чужим. Я же за советом, а то действительно как не сюда попал » Обучалка » Практика
Вопрос про термостат
Добавлено: Пн янв 16, 2012 08:31:36
ploop
Вы спрашивали про работу с датчиком, а тут примеров кода на всех языках немеряно.
Ладно. Давайте конструктивно.
смысл такой что при срабатывании верхний - нижний порог допустим 21°-23° все нормально но когда разрыв в один градус 21°-22° то реле на включение котла постоянно щелкает.
Так и будет. Десятые градуса в большей степени показывают шумы АЦП, сотые - чистые шумы, и прыгать будут постоянно. Можно их конечно сгладить усреднением (среднее арифметическое - считываете, допустим, 16 показаний, потом делите на 16), но это ничего особенного не даст.
Если надо точно поддерживать какой-то параметр инертной системы (температуру воды, как у вас), простое релейное (или пропорциональное) регулирование тут не поможет. Будьте готовы к "волнам" в 5-10°, если не больше. Надо городить ПИД-регулирование.
Как оно реализуется программно не знаю, не делал, но слова для поиска дал.
Re: Вопрос про термостат
Добавлено: Пн янв 16, 2012 23:31:54
rjn
ПИД регулятор это сильный наворот для моего девайса. Тут еще такая мысль была поставить задержку выключения на выход который идет на реле при достижении верхнего порога, чтобы избавится от постоянного перещелкивания реле. вот только где ее в программе поставить так чтобы считывание температуры с датчика не тормозить. Заранее спасибо.
Re: Вопрос про термостат
Добавлено: Пн янв 16, 2012 23:38:57
ploop
Я посмотрел ваш архив, но похоже это не то, что было на скриншоте. Точнее там был виден русский текст, а нигде в программе он не выводится.
Это тот архив?
И перезалейте его сюда, чтоб ту тему не дёргать.
Я в Си не силён, но думаю, общими усилиями что-нибудь родим.
Re: Вопрос про термостат
Добавлено: Вт янв 17, 2012 00:52:53
rjn
вот пожалуйста, просто в протеусе я использую библиотеку русский для LCD, а в контроллер заливал с использованием директивы pragma rl+. Я программу сейчас подредактировал надписи все английскими буквами не красиво, но теперь должно в любом протеусе отображать
могу добавить файлик из библиотеки для протеуса версии 7.7 русский на LCD после замены стандартного будет как на скришоте
Re: Вопрос про термостат
Добавлено: Вт янв 17, 2012 01:40:06
phenomen
Вам не нужно копипастить код с других ресурсов.
Вот мой старый но простой код для CV:
Код: Выделить всё
#include <mega8.h>
#include <delay.h>
#include <stdio.h>
#asm
.equ __w1_port=0x12 ;PORTD
.equ __w1_bit=0
#endasm
#include <1wire.h>
// DS1820 Temperature Sensor functions
#include <ds1820.h>
#include "n3310lcd.c"
// Declare your global variables here
void main(void)
{
int temp;
char i;
//some code (инициализация контроллера).........
LcdInit();
w1_init();
while (1)
{
temp=ds1820_temperature_10(0);
LcdClear();
sprintf (lcd_buf, "%d.%02d C",temp/100,temp%100);
LcdStringBig(1,2);
LcdUpdate();
delay_ms(300);
}
}
Умножение температуры было на 100, почему так не понимаю

. Но все работало отлично
Тоесть теперь вам нужно сравнивать температуру вместо 21-22°C с 210-220 (а то и ваще с 2100-2200).
Плюс к всему можно добавить т.н. "мертвую зону" (en "deadband") в 1°C и тогда щелканье точно пропадет

Re: Вопрос про термостат
Добавлено: Вт янв 17, 2012 01:58:46
rjn
phenomen отличный код, большое спасибо, а на счет мертвой зоны не совсем понятно можно по конкретней на картошках так сказать
Re: Вопрос про термостат
Добавлено: Вт янв 17, 2012 02:11:29
phenomen
Код: Выделить всё
#define DEADBAND 1
//.........
if(Value+DEADBAND<LowLimit)
doSomething()
else
if(Value-DEADBAND>HighLimit)
doSomethingElse()
//.........
Пример
../-----+++++-----\............
Где "." - нужно срочно чтото делать
"/,\" - действуем
"-" - а давай-ка подожду, узнаю как дальше будет себя вести
"+" - собственно все ок, можно и поспать
Можно использовать и float.
Re: Вопрос про термостат
Добавлено: Вт янв 17, 2012 02:15:31
phenomen
кстати, автору скопипасченого кода нужно почитать про С, очень уж интересное место:
Код: Выделить всё
sprintf(lcd_buffer,"t=%i.%u\xdfC",temp,temp%1);
а именно temp%1, не говоря уже о другом
Re: Вопрос про термостат
Добавлено: Вт янв 17, 2012 02:24:51
rjn
спасибо за подсказку намотал на ус. При помощи проб и ошибок. а код копировал от друзей сайта my-avr.at.ua так по моему хотя, может и со стандартной библиотеки так написано осталось надо глянуть
Re: Вопрос про термостат
Добавлено: Вт янв 17, 2012 02:30:24
rjn
да точно это из стандартных exemple CV там код так сделан был
Re: Вопрос про термостат
Добавлено: Вт янв 17, 2012 04:38:17
rjn
все отлично получилось, спасибо большое phenomen.