Page 2 of 15

Re: Термостат ∆T=0,1°C - работа над ошибками

Posted: 10 Dec 2014 16:08
by dandiv
Мигание (незначительное изменение яркости при опросе датчика малозаметно) можно сказать что почти нет - это не напрягает, а на каких-то индикаторах может и почти незаметно будет.
строка 400
вместо ShowDisplayData(); поставить ShowDisplayData11Times();
сейчас это максимум, чего можно добиться. Если получится освободить память, сделаем вообще без моргания
Возможно попробую и посмотрю что получится, пока нет времени...
propell_ant я про мигание при опросе датчика совместно с изменением яркости при ошибке написал для сведения - чтобы была полная картина. Попробую уменьшить яркость (не 50% а ниже) как будет время вникать в код (я уже писал, что в программировании не силен, поэтому нужно больше времени для чтения и редактирования кода) :)
p/s Рад, что проект дорабатывается :drink:

Re: Термостат ∆T=0,1°C - работа над ошибками

Posted: 10 Dec 2014 16:24
by propell_ant
dandiv wrote:Мигание (незначительное изменение яркости при опросе датчика малозаметно) можно сказать что почти нет - это не напрягает, а на каких-то индикаторах может и почти незаметно будет...
Возможно попробую и посмотрю что получится, пока нет времени...
я про мигание при опросе датчика совместно с изменением яркости при ошибке написал для сведения - чтобы была полная картина. Попробую уменьшить яркость (не 50% а ниже) как будет время вникать в код
Это скорее для я общественности, народ часто задает вопросы про чуток-моргание.

Re: Термостат ∆T=0,1°C - работа над ошибками

Posted: 10 Dec 2014 17:32
by dandiv
Ясно, желаю успехов! :good:

Добавлено спустя 51 минуту 42 секунды:
Сделал следующее:
#define BlinkHalfPeriod 48 //примерно 1 моргание в секунду

if (View == 0) if (ErrorDetected) if (DimmerCounter % 2 == 0)

вместо ShowDisplayData(); поставил ShowDisplayData11Times()

Заключение:
Опрос датчика почти незаметен, можно сказать идеально. При ошибке моргание яркостью примерно раз в секунду, изменение яркости очень заметно (идеально)

p/s Включаю, сдергиваю датчик (обрыв) - Е0.2 (идеально срабатывает), при подключении датчика иногда выскакивает Е0.3 (значит реагирование на ситуацию, когда получилось считать информацию с датчика без предшествующей команды "ConvertT" тоже работает идеально), при замыкании на массу Е0.4 (тоже идеально).

Похоже получилась отличная прошивка. Если внесете такие изменения в исходник, то думаю лучшего желать и не нужно. (Ну а если есть возможность оптимизировать код, то все в Ваших руках!)

p/s2 для себя я еще немного подправил код, чтобы при ошибке EEPROM в него записывалось 3 градуса и дельта 3 (у меня будет работать на обогрев погреба, чтобы при 3 градусах включался обогрев и при 6 отключался. Возможно потом кнопками подредактирую, но если произойдет сбой EEPROM, чтобы записались именно эти значения, чтобы работа термостата была в приемлемых диапазонах). Этим я хочу сказать, что при выкладывании конечного исходника было бы полезно указать в каких строчках можно изменить данные чтобы для каждого конкретного случая подправить исходник(так сказать дополнительная перестраховка для тех, кто беспокоится о том, чтобы не возникла нештатная ситуация)

Re: Термостат ∆T=0,1°C - работа над ошибками

Posted: 11 Dec 2014 08:59
by propell_ant
dandiv wrote:Похоже получилась отличная прошивка.
Сам удивляюсь.
для себя я еще немного подправил код, чтобы при ошибке EEPROM в него записывалось 3 градуса и дельта 3 (у меня будет работать на обогрев погреба, чтобы при 3 градусах включался обогрев и при 6 отключался. Возможно потом кнопками подредактирую, но если произойдет сбой EEPROM, чтобы записались именно эти значения, чтобы работа термостата была в приемлемых диапазонах). Этим я хочу сказать, что при выкладывании конечного исходника было бы полезно указать в каких строчках можно изменить данные чтобы для каждого конкретного случая подправить исходник(так сказать дополнительная перестраховка для тех, кто беспокоится о том, чтобы не возникла нештатная ситуация)
если значения температур заранее известны и годами не меняются - выносите их вообще из EEPROM прямо в программу - итоговая надежность всей системы очень повысится. Достаточно вместо строк 683-690

Code: Select all

if ((eeT_LoadOn > 2250) || (eeT_LoadOn < 450))    //если в EEPROM значение > 2250 или < 450 значит он не прошился, или 
  eeT_LoadOn = 1280;                             //чё-то глюкануло, поэтому запишем туда начальные значения.
if (eeDeltaT > 900)
  eeDeltaT = 10;  
  
  
T_LoadOn = eeT_LoadOn;  //читаем значение Установленной температуры из EEPROM в RAM
DeltaT = eeDeltaT;      //читаем значение Дэльты из EEPROM в RAM
оставить что-то типа этого, и больше уже кнопками не настраивать:

Code: Select all

T_LoadOn = 1280;
DeltaT = 10;
//if ((eeT_LoadOn > 2250) || (eeT_LoadOn < 450))    //если в EEPROM значение > 2250 или < 450 значит он не прошился, или 
//  eeT_LoadOn = 1280;                             //чё-то глюкануло, поэтому запишем туда начальные значения.
//if (eeDeltaT > 900)
//  eeDeltaT = 10;  
  
  
//T_LoadOn = eeT_LoadOn;  //читаем значение Установленной температуры из EEPROM в RAM
//DeltaT = eeDeltaT;      //читаем значение Дэльты из EEPROM в RAM
Ну, а для EEPROM, настроек по умолчанию, всякой разной частоты моргания и процента яркости - наверно придется еще одну доработку сделать - вынести все настройки в отдельный хедер и написать прямо в нем подробные коменты.

Re: Термостат ∆T=0,1°C - работа над ошибками

Posted: 11 Dec 2014 10:38
by Recov
Спасибо огромное! Прошивка из (сообщение 51) tl_mod_002b2 работает без нареканий, отличный и достаточно безопасный функционал!

Re: Термостат ∆T=0,1°C - работа над ошибками

Posted: 11 Dec 2014 11:30
by agvares
1)Возник один вопрос, Мне нужен термостат с большой инерцией (чтоб мог выключаться через определенное время, дабы не сгорел). Ваш термостат имеет такие возможности? Если нет, что следует изменить?
2)Нужен pspice код

Re: Термостат ∆T=0,1°C - работа над ошибками

Posted: 11 Dec 2014 12:15
by dandiv
как понять
дабы не сгорел
? С чего это он должен сгореть?

Re: Термостат ∆T=0,1°C - работа над ошибками

Posted: 11 Dec 2014 12:19
by Recov
dandiv wrote:как понять
дабы не сгорел
? С чего это он должен сгореть?
Действительно, с чего? Не с перепугу же. У меня на отоплении дома два термостата и один на курятник работают третий год, ни один еще не сгорел.

Re: Термостат ∆T=0,1°C - работа над ошибками

Posted: 11 Dec 2014 12:55
by propell_ant
agvares wrote:1)Возник один вопрос, Мне нужен термостат с большой инерцией (чтоб мог выключаться через определенное время, дабы не сгорел). Ваш термостат имеет такие возможности? Если нет, что следует изменить?
Несколько человек в основной ветке форума делали доработки, похожие на то что вы описали. Например вот или еще вот
2)Нужен pspice код
Его нету, объясните более подробно, зачем вам pspice.

Re: Термостат ∆T=0,1°C - работа над ошибками

Posted: 11 Dec 2014 18:37
by dandiv
propell_ant Подскажите пожалуйста по поводу ошибок Е0.1 и Е0.3:
Подключил датчик, который находится на улице, длина провода около 15 метров (UTP кабель), подключение датчика по трехпроводной схеме, подтягивающий резистор 4.7К - все работает отлично, на улице -9С, температура отображается верно. Игрался с настройками - выставил температуру включения (исполнительно устройства пока нет), дэльту, думаю как проверить работу... выхожу на улицу, пальцами рук подогреваю датчик - температура начинает резко расти, а вот термостат начинает сваливаться в ошибку (чаще Е0.1 показывает, но иногда Е0.3 причем переодически - ошибка...температура...ошибка и т.д. Сначала это изменение состояния чаще, потом по мере уменьшения скорости изменения температуры реже и потом просто отображает температуру без ошибки). Нужно номинал подтягивающего резистора менять или из-за резкого изменения температуры данные с датчика начинают некорректно передаваться (т.е датчик начинает передавать данные, а температура уже изменилась и окончание данных уже не та, что должна быть) и из-за этого проблемы? Просто работу датчика смутно представляю.
p/s При медленном изменении температуры ошибки не появляются. Может это натолкнет Вас на какие-то мысли по поводу редактирования исходника...если это конечно не чисто проблемы железа :dontknow:
p/s2 Да и точка еще немного путаницу вводит... пришлось светодиод на выход порта, который управляет нагрузкой повесить для тестов, чтобы видно было состояние нагрузки

Re: Термостат ∆T=0,1°C - работа над ошибками

Posted: 11 Dec 2014 19:03
by IYra
dandiv wrote:Нужно номинал подтягивающего резистора менять
Скорее всего (в сторону уменьшения) На скорость изменения вроде не должна реагировать
А попробуй прошивку termostat_led_5_40_0_4 - что будет показывать

Re: Термостат ∆T=0,1°C - работа над ошибками

Posted: 11 Dec 2014 19:32
by dandiv
IYra, propell_ant Извините пожалуйста, предыдущий мой пост пока на "паузу поставьте" - нужно проверить кое-что... Есть кое-какие мысли, завтра более подробно по изучаю проблему и потом отпишусь :pardon:

Re: Термостат ∆T=0,1°C - работа над ошибками

Posted: 11 Dec 2014 20:05
by propell_ant
dandiv wrote:Да и точка еще немного путаницу вводит... пришлось светодиод на выход порта, который управляет нагрузкой повесить для тестов, чтобы видно было состояние нагрузки
Вот исправление отображения точки.
И IYra правильно советует, поставьте проверенную прошивку, это же тестовая, на ней живого места не осталось после трех оптимизаций. Можно termostat_led_5_40_0_4, можно tl_mod_001, tl_mod_003 - это надежно.
Насчет резистора - да при 15м уже пора подумать о подборе номинала поменьше.
И проверьте контакт между датчиком и кабелем, больше похоже на непропай.

А логика работы датчика, конечно, другая. По команде ConvertT запускается преобразование температуры, датчику, конечно, всё равно, с какой скоростью она меняется. Понятно, что если за 750мс температура изменится на несколько градусов, точность измерения будет сомнительной, но измерение он доведет до конца. Через секунду после ConvertT посылается запрос на передачу измеренной температуры, и тут-то все ошибки и возникают.

Re: Термостат ∆T=0,1°C - работа над ошибками

Posted: 11 Dec 2014 23:38
by Recov
В идеале при такой длине 15м резистор надо паять на сам датчик.

Re: Термостат ∆T=0,1°C - работа над ошибками

Posted: 12 Dec 2014 03:57
by dandiv
А попробуй прошивку termostat_led_5_40_0_4 - что будет показывать
Сегодня вечером попробую ее и какую-нибудь из tl_mod_001, tl_mod_003.
Насчет резистора - да при 15м уже пора подумать о подборе номинала поменьше.
Попробую после проверки с разными версиями прошивки
В идеале при такой длине 15м резистор надо паять на сам датчик.
, т.е. с основной платы его вообще убрать или на плату поставить какой-нибудь большего номинала.
p/s А первым делом попробую датчик сменить. Дома тестил с одним датчиком (все прошивки), на улице висит другой (когда-то использовался в схеме градусника), так вот тот с которым тестирование вел - изменения температуры по 0.1 градуса, а тот что сейчас висит 0.5 градуса... может с ним чего не так?

Re: Термостат ∆T=0,1°C - работа над ошибками

Posted: 12 Dec 2014 07:45
by propell_ant
dandiv wrote:тот с которым тестирование вел - изменения температуры по 0.1 градуса, а тот что сейчас висит 0.5 градуса... может с ним чего не так?
В датчиках есть настройка точности, ее можно менять, записывая данные в датчик. Понятно, что в нашей прошивке запись в датчик не делается - из экономии памяти прошивки.

Еще модель датчика может оказаться другой. Не DS18B20.

Re: Термостат ∆T=0,1°C - работа над ошибками

Posted: 12 Dec 2014 12:06
by Recov
Народ, при длине провода к датчику более 5м. паяйте пожалуйста резистор 4.7К на сам датчик. Тут дело может быть как в увеличении сопротивления, так и в наводках по линии. Согласитесь что редко кто делает линию до датчика в экранированном проводе.

По своему опыту скажу что первое что влияет на сбои ДАННОГО девайса - это импульсный блок питания с гадостным выходом. Проверяется легко, замена на любой трансформаторный Б/П. Второе - проблема в монтаже (промыть спиртом, проверить под лупой...). Третье - и самое последнее - проблема с резистором 4.7кОм. В моей практике ни разу не встретился. Правда с учетом первого абзаца. Кстати заметили: - "Ай не работает, ай не светится, ай, ай...." И потом, в 90% случаях - ой, всем спасибо, разобрался, оказалось дорожка с ... ноги МК замкнула на ... резистор... Прошу прощения, это не поучения, а просто надо подумать, проанализировать.... Ничего тут плохого нет, сам так начинал.

Re: Термостат ∆T=0,1°C - работа над ошибками

Posted: 12 Dec 2014 12:29
by dandiv
Блок питания трансформаторный, выполнен как зарядное устройство для аккумулятора 12V7Ah, т.е. на выходе постоянно аккумулятор подключен.
А вот резистор попробую перенести на сам датчик

Сегодня пробовал тестировать (на улице потеплело) и ошибки не появляются, поэтому пока не стал менять прошивку, поэтому пока перенес подтягивающий резистор с основной платы прямо на выводы датчика, теперь буду наблюдать. Датчик поменял, на тот, с которым тестировал прошивки дома. Тот который стоял на улице (DS18B20 тоже...) проверил (когда-то давно собирал приблуду на COM порт для считывания показаний с датчиков DS18S20, DS18B20, DS1821), так вот у него "resolution 9 bit" оказалось, поставил первоначальный с "resolution 12 bit", поэтому изменения показаний в 0.5 градусов стало понятно из-за чего было. Теперь буду наблюдать за работой термостата, о результатах потом отпишусь... (но похоже проблема это не программная, поэтому пока вопросы по прошивке поднимать не буду)

Заметил одну вещь: Если возникают ошибки Е0.2 или Е0.4, то показания начинают мигать (принудительно создавал такую ситуацию). На данный момент подтягивающий резистор стоит на датчике (прям на его выводах), включаю питание - ошибка Е0.0 (нет ошибок), спустя ночь при входе в меню отображается ошибка Е0.1, но показания температуры не мигают (либо ошибка кратковременная и поэтому показания не мигают, либо при этой ошибке в исходнике недочет и нет мигания...). По железу - наверно нужно уменьшить номинал подтягивающего резистора, для устранения ошибки - попробую, а вот то, что не отображается миганием эта ошибка - похоже в исходнике так организовано. Надеюсь эта замеченная ситуация поможет в доработке исходника...

Re: Термостат ∆T=0,1°C - работа над ошибками

Posted: 15 Dec 2014 10:22
by propell_ant
dandiv wrote:а вот то, что не отображается миганием эта ошибка - похоже в исходнике так организовано. Надеюсь эта замеченная ситуация поможет в доработке исходника...
Да, пожалуй поможет, это подтверждение правильной работы алгоритма - одиночная ошибка происходит, записывается в память, но сразу же после ошибки данные читаются успешно, счетчик сбрасывается, индикатор не моргает, но код ошибки уже записан и его можно просмотреть.
Насчет того, что E0.2 и E0.4 моргают сразу - они моргают почти сразу. Первая возникшая ошибка просто не показывается, вторая - отображается на экране. Задержка между обрывом/КЗ и отображением получается от 1 до 2 секунд.

Re: Термостат ∆T=0,1°C - работа над ошибками

Posted: 17 Dec 2014 08:03
by dandiv
propell_ant
В начале исходника tl_mod_002b3

eeprom int eeT_LoadOn = 1280; //1280 = +28°C 1140 = +14°C
eeprom int eeDeltaT = 10; //1°C

А потом при проверке EEPROM

if ((eeT_LoadOn > 1250) || (eeT_LoadOn < -550)) //если в EEPROM значение > 2250 или < 450 значит он не прошился, или
eeT_LoadOn = 280; //чё-то глюкануло, поэтому запишем туда начальные значения.
if (eeDeltaT > 900)
eeDeltaT = 10;

С дэльтой все понятно, а вот eeT_LoadOn... :dontknow:

Наверно так нужно?
if ((eeT_LoadOn > 2250) || (eeT_LoadOn < -450)) //если в EEPROM значение > +125С или < -55С значит он не прошился...
eeT_LoadOn = 1280

Re: Термостат ∆T=0,1°C - работа над ошибками

Posted: 17 Dec 2014 10:01
by propell_ant
dandiv wrote:propell_ant
В начале исходника tl_mod_002b3

eeprom int eeT_LoadOn = 1280; //1280 = +28°C 1140 = +14°C
eeprom int eeDeltaT = 10; //1°C

А потом при проверке EEPROM

if ((eeT_LoadOn > 1250) || (eeT_LoadOn < -550)) //если в EEPROM значение > 2250 или < 450 значит он не прошился, или
eeT_LoadOn = 280; //чё-то глюкануло, поэтому запишем туда начальные значения.
if (eeDeltaT > 900)
eeDeltaT = 10;

С дэльтой все понятно, а вот eeT_LoadOn... :dontknow:

Наверно так нужно?
if ((eeT_LoadOn > 2250) || (eeT_LoadOn < -450)) //если в EEPROM значение > +125С или < -55С значит он не прошился...
eeT_LoadOn = 1280
нет, правильно eeT_LoadOn поменять на 280, мой недогляд

Code: Select all

eeprom int eeT_LoadOn = 280;
пришлось отказаться от хранения в формате 1000+T (из экономии памяти)

Re: Термостат ∆T=0,1°C - работа над ошибками

Posted: 17 Dec 2014 10:32
by dandiv
Т.е
eeprom int eeT_LoadOn = 280; //280 = +28°C 140 = +14°C
eeprom int eeDeltaT = 10; //1°C
if ((eeT_LoadOn > 1250) || (eeT_LoadOn < -550)) //если в EEPROM значение > +125С или < -55С значит он не прошился, или
eeT_LoadOn = 280; //чё-то глюкануло, поэтому запишем туда начальные значения +28С
if (eeDeltaT > 900) // Если дэльта больше 90С
eeDeltaT = 10; // то запишем туда 1С
Так? Просто в комментариях ошибки были :)

Теперь текст
//температура для удобства представлена так:
// - до 1000 = отрицательная
// - 1000 = 0
// - больше 1000 = положительная
// - 0,1°С = 1
//---------------------------------
//-55°C = 450
//-25°C = 750
//-10.1°C = 899
//0°C = 1000
//10.1°C = 1101
//25°C = 1250
//85°C = 1850
//125°C = 2250
нужно привести к виду
//температура для удобства представлена так:
// 0,1°С = 10
//---------------------------------
//-55°C = -550
//-25°C = -250
//-10.1°C = -101
//0°C = 0
//10.1°C = 101
//25°C = 250
//85°C = 850
//125°C = 1250
Или я неправильно понял? С отрицательными температурами теперь отрицательные значения?

Re: Термостат ∆T=0,1°C - работа над ошибками

Posted: 17 Dec 2014 12:08
by propell_ant
dandiv wrote:Т.е
eeprom int eeT_LoadOn = 280; //280 = +28°C 140 = +14°C
eeprom int eeDeltaT = 10; //1°C

if ((eeT_LoadOn > 1250) || (eeT_LoadOn < -450)) //если в EEPROM значение > +125С или < -55С значит он не прошился, или
eeT_LoadOn = 280; //чё-то глюкануло, поэтому запишем туда начальные значения +28С
if (eeDeltaT > 900) // Если дэльта больше 90С
eeDeltaT = 10; // то запишем туда 1С

Так? Просто в комментариях ошибки были :)
ага. Коменты исправлять - всё-таки моя работа, не бегите впереди паровоза ;)
пока в первый пост не выложил - это бета для суровых мужиков, но про коменты я бы, конечно забыл, если б не вы.

Re: Термостат ∆T=0,1°C - работа над ошибками

Posted: 17 Dec 2014 12:16
by agvares
propell_ant, задание на курсовой проэкт, решил взять эту схему. Но для полной картины нужен pspice код.

Re: Термостат ∆T=0,1°C - работа над ошибками

Posted: 17 Dec 2014 12:34
by dandiv
propell_ant Пока редактировал предыдущий пост, Вы уже ответ написали. Я запутался с минусовой температурой, гляньте мою последнюю цитату пожалуйста. Про паровоз улыбнуло :) , просто начал просматривать исходник, чтобы возможно было подправлять под себя, а тут такие изменения, что я попал в ступор...