Page 1 of 15

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

Posted: 04 Dec 2014 11:09
by propell_ant
Здесь будем выкладывать исправления к прошивке Термостат ∆T=0,1°C

Выложена версия 4.1.00 (см. в прикрепленных архивах)
Изменения:
Исходники переехали с моего компа на git (https://github.com/propell-ant/termostat-0.1-rework)
шаг изменения температуры вынесен в h файл (T_STEP) - по умолчанию 1=0.1С
добавлена возможность заходить в настройки нажатием только одной кнопки теперь это опция (ENTER_SETTINGS_BY_ONE_KEY) - по умолчанию опция выключена
Тестируется опция повышения точности измерений за счет более редкого опроса датчика (PREVENT_SENSOR_SELF_HEATING) - по умолчанию опция выключена
Для поддержания совместимости с версией для Mega8 (http://hardlock.org.ua/viewtopic.php?f=10&t=474) некоторые прямые обращения к регистрам заменены на дефайны:
DISPLAY_PORT, DISPLAY_PIN, DISPLAY_DDR,
OUTPIN_NO (нормально открытый порт),
OUTPIN_NC (нормально закрытый порт - в Mega8 пока не поддерживается)
Бинарники теперь собираются на CodevisionAVR v3 (у этой версии есть бесплатный ограниченный режим и термостат как раз нормально в этом режиме компилируется)
Для автоматизации сборки в проект добавлен файл version.txt
Изменения значительные, так что номер версии поднимается до 4.1
В железе проверял на прошивке для ОК, работает нормально.

проверено-работает 20 раз
проверено-глючит 0 раз


Если кто устанавливает исправление - пишите в эту ветку, типа "прошился tl_v4.1.00, работает (или не работает)"

доработка "tl_v3.2_mod_001" (ищите в архивах соотв. папку)
Исправлен глюк "не работает кнопка "+" при изменении дельты, значения меняются от 99 до 0 и снова перескакивают на 99
проверено-работает 1 раз

доработка "tl_v3.2_mod_003" (ищите в архивах соотв. папку)
При старте показывать не 0.0, а что-то непохожее на цифры, например "----"
включает в себя tl_v3.2_mod_001
проверено-работает 1 раз

доработка "tl_v3.2_mod_005" (ищите в архивах соотв. папку)
При старте не включать нагрузку до получения первого значения температуры
включает в себя tl_v3.2_mod_001, tl_v3.2_mod_003
проверено-работает 0 раз

доработка "tl_v3.2_mod_006" (ищите в архивах соотв. папку)
Правильное ограничение температуры при изменении дельты
включает в себя tl_v3.2_mod_001, tl_v3.2_mod_003, tl_v3.2_mod_005
проверено-работает 0 раз

версия tl_v4.0.3 Проверка данных с датчика, желательно определять обрыв и КЗ на землю, включает в себя все моды 001-006. Настолько много изменений, что приходится выделять в отдельную версию.
  1. нагрузка не включается до получения первых данных от датчика
  2. до получения первых данных от датчика на индикаторе отображается "---.-"
  3. контроль ошибок в линии датчика
  4. вход в настройки только по нажатию двух кнопок
  5. повторное нажатие на две кнопки сразу - настройка дельты
  6. третье нажатие на две кнопки сразу - просмотр последней обнаруженной ошибки
  7. переход в состояние ошибки после 2х любых ошибок подряд
  8. мигание индикатора в состоянии ошибки
  9. мигание можно прекратить нажатием на любую кнопку, можно на две кнопки сразу
  10. но состояние ошибки при этом не сбрасывается
  11. в состоянии ошибки отображается код ошибки:
    "E 0.1" ошибка контрольной суммы
    "E 0.2" обрыв
    "E 0.3" после нескольких ошибок от датчика получено значение 85°C
    "E 0.4" короткое замыкание на землю
  12. в состоянии ошибки нагрузка отключается на всех портах
  13. как только данные с датчика удастся прочитать - снова отображается температура, включается или выключается нагрузка, но моргание остается - это позволяет увидеть спустя длительное время, что были ошибки, можно посмотреть код последней возникшей ошибки трехкратным нажатием на обе кнопки
  14. шаг времени таймера - ровно 1с, измерение температуры - каждые 2 секунды (особенность нашего алгоритма)
  15. включено подавление мерцания при опросе датчика
  16. введено понятие опций, опции включаются "раскомментированием дефайнов" в файле termostat_led.h
  17. прошивка может быть собрана на более новых версиях CVAVR (например v2, v3)
  18. в архив с бинарниками добавлены прошивки под шаг в 1 градус, папка tl_v4.1.02\hex_step_1deg

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

Posted: 04 Dec 2014 11:11
by propell_ant
Дополнительные инструкции по прошивке
При эксплуатации в теплых помещениях (при комнатной температуре) однозначно нужно использовать встроенный BOD - детектор низкого напряжения питания.
При эксплуатации на морозе (в т.ч. внутри морозильных камер) однозначно НЕЛЬЗЯ использовать встроенный BOD, т.к. он будет глючить и блокировать работу МК. Используйте супервизор питания, но обязательно проверьте работу ВСЕГО (включая блок питания и реле) устройства в морозилке.

Ponyprog dandyv
Для корректной прошивки микроконтроллера программатором PonyProg необходимо следовать следующим инструкциям.

File – Open Program (Flash) File… указываем путь к файлу с расширением ‘hex’
Command – Write Program (Flash)

File – Open Data (EEPROM) File… указываем путь к файлу с расширением ‘eep’
Command – Write Data (EEPROM)

В обоих случаях должна пройти запись и верификация.

И самое главное:

Command – Read All
После прочтения контроллера убедиться, что EEPROM прошился (Замечено, что не всегда прошивается и потом возникают проблемы в режиме установки Дэльты). Если EEPROM не прошился – пробовать еще раз его прошить

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

Posted: 04 Dec 2014 11:12
by propell_ant
зарезервировано

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

Posted: 04 Dec 2014 13:12
by dandiv
Я так понимаю при включении на дисплее 0.0 и нет защиты от обрыва датчика, т.е. оригинальная прошивка от hardlock просто исправлен глюк с кнопкой при проблемах с EEPROM?

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

Posted: 04 Dec 2014 14:26
by propell_ant
dandiv wrote:оригинальная прошивка от hardlock просто исправлен глюк с кнопкой при проблемах с EEPROM?
ага.
Обрыв и 0.0 добавил в работу.

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

Posted: 05 Dec 2014 03:44
by dandiv
Прошил tl_mod_001 - Работает!

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

Posted: 06 Dec 2014 10:36
by dandiv
Для корректной прошивки микроконтроллера программатором PonyProg необходимо следовать следующим инструкциям.

File – Open Program (Flash) File… указываем путь к файлу с расширением ‘hex’
Command – Write Program (Flash)

File – Open Data (EEPROM) File… указываем путь к файлу с расширением ‘eep’
Command – Write Data (EEPROM)

В обоих случаях должна пройти запись и верификация.

И самое главное:

Command – Read All
После прочтения контроллера убедиться, что EEPROM прошился (Замечено, что не всегда прошивается и потом возникают проблемы в режиме установки Дэльты). Если EEPROM не прошился – пробовать еще раз его прошить

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

Posted: 06 Dec 2014 15:56
by georg77
весьма опасная фича - слишком лёгкий вход в режим установки температуры термотата - простое нажатие любой из 2-х кнопок
может вызвать беду при попадании влаги, падении посторонних предметов, баловства детей
я переделал вход в этот режим так что можно войти только при нажатии 2-х кнопок одновременно (как в режим установки дельты)
к сожалению под рукой нет исходника с переделкой

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

Posted: 06 Dec 2014 17:47
by propell_ant
georg77 wrote:весьма опасная фича - слишком лёгкий вход в режим установки температуры термотата - простое нажатие любой из 2-х кнопок
...
к сожалению под рукой нет исходника с переделкой
там всё просто, даже размер прошивки (почти) не поменяется. Я наверно включу по умолчанию вход в настройки по двум кнопкам. Надо подумать, что делать с такими переделками, народ же комбинировать захочет.

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

Posted: 06 Dec 2014 21:26
by hardlock
propell_ant, отличная ветка! Так держать. Я к сожалению пока всё дальше от этого... :(

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

Posted: 07 Dec 2014 20:17
by propell_ant
dandiv wrote:Я так понимаю при включении на дисплее 0.0 и нет защиты от обрыва датчика, т.е. оригинальная прошивка от hardlock просто исправлен глюк с кнопкой при проблемах с EEPROM?
dandiv, если сможете, протестируйте в железе определение обрыва и КЗ (tl_mod_002 во вложении).
Описание:
1. При получении данных проверяется контрольная сумма,
1.1 если контрольная сумма не совпала - начинается отсчет ошибок,
1.2 предусмотрено некоторое допустимое количество ошибок - строка 61 - #define MaxDataErrors 1
это означает, что на единичную ошибку (это вообще-то вероятная ситуация) термостат не отреагирует никак.
Можно поставить MaxDataErrors 0 - будет реакция на каждую ошибку, MaxDataErrors 255 - будет ждать 255*2 секунд, прежде чем отреагировать.
2.Реакция на ошибку:
2.1 Отключение обоих управляющих портов PORTD.2 = 0; PORTD.3 = 0;
2.2 Отображение информации об ошибке: E 0.X, где X - код ошибки (см. ниже)
3. Восстановление после ошибки
3.1 Первое же удачное получение данных приводит к обычной реакции термостата в зависимости от полученного значения температуры
3.2 Термостат перестает показывать код ошибки и начинает показывать текущую температуру
4. Коды и описание ошибок:
4.1 "E 0.1" - ошибка контрольной суммы.
4.2 "Е 0.2" - обрыв линии данных датчика - все принятые байты данных содержат только 0xFF, это однозначно означает отсутствие какого-либо ответа от датчика, как правило это именно обрыв
4.3 "Е 0.3" - после некоторого периода нахождения в состоянии ошибки данных удалось успешно считать температуру, но полученное значение температуры в точности равно 85 градусов (0x0550) - это значение по умолчанию возвращается при попытке чтения данных из датчика без предшествующей команды "ConvertT". После длительного отсутствия связи вероятность получения этого "волшебного" значения составляет примерно 50% (особенность нашего алгоритма опроса датчика)
4.4 "Е 0.4" - короткое замыкание на землю - при чтении данных все байты оказались равными 0x00. С исправным датчиком это невозможно, как правило это именно КЗ на землю.

+ по вашему запросу - tl_mod_003 При старте показывать не 0.0, а что-то непохожее на цифры, например "----", эта прошивка не включает в себя tl_mod_002
прошивка для нагревателя и исходники - в аттаче

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

Posted: 08 Dec 2014 03:52
by dandiv
propell_ant Проверить смогу только вечером, дома он остался

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

Posted: 08 Dec 2014 07:57
by propell_ant
hardlock wrote:propell_ant, отличная ветка! Так держать. Я к сожалению пока всё дальше от этого... :(
hardlock, спасибо!
Вам просто нужен модератор в пару веток - трафик небольшой, но реакция на исправления народу всё-таки требуется.

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

Posted: 08 Dec 2014 17:59
by dandiv
Отчет:
(проверял только heat OA)
tl_mod_002
Прошил hex (без записи EEPROM)
При включении без температурного датчика 0.0 потом ошибка Е0.2. В настройках 28.0 и d 1.0 (обе кнопки работают). Из меню регулировки температуры и дэльты не выходит (так и отображается выбранное меню). При включении с датчиком температуры 0.0 потом текущая температура, кнопки во всех режимах работают. При замыкании на на землю отображается Е0.4 (спустя несколько попыток прочитать датчик), после устранения замыкания отображается текущая температура (узнать было ли замыкание невозможно - никак не индицируется).
Прошил hex (с записью EEPROM) - все так же.

tl_mod_003
Прошил hex (без записи EEPROM)
При включении без температурного датчика ---.- потом 0.0. При включении с датчиком температуры ---.- потом текущая температура

p/s tl_mod_002 - Отключение обоих управляющих портов PORTD.2 = 0; PORTD.3 = 0 не проверил, забыл :oops: Сейчас комп, к которому подключен программатор занят, проверить не могу. Е0.1 и Е0.3 не знаю как можно смоделировать.

p/s 2 Для себя я немного корректировал прошивку IYra termostat_led_5_40_0_4, там при обрыве датчика показания начинают мигать, если датчик потом читается, то отображается текущая температура (продолжает мигать до тех пор, пока не будет нажата одна из кнопок. Вроде очень информативно, так как если увидел, что показания мигают, то значит были проблемы и необходимо искать причину. Если видеть температуру и код возникшей ошибки... как именно лучше это отобразить пока нет предложений... то это даст повод на поиск возможных проблем).

Добавлено спустя 1 час 21 минуту 42 секунды:
propell_ant Огромное Вам Спасибо за доработку авторской hardlock прошивки!!! :good:

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

Posted: 08 Dec 2014 20:29
by propell_ant
dandiv wrote:Отчет:
(проверял только heat OA)
tl_mod_002
Прошил hex (без записи EEPROM)
При включении без температурного датчика 0.0 потом ошибка Е0.2.
При включении с датчиком температуры 0.0 потом текущая температура, кнопки во всех режимах работают.
При замыкании на на землю отображается Е0.4 (спустя несколько попыток прочитать датчик), после устранения замыкания отображается текущая температура
всё так и задумано.
В настройках 28.0 и d 1.0 (обе кнопки работают). Из меню регулировки температуры и ли дэльты не выходит (так и отображается выбранное меню).
это мой косяк, отлично! Видел такое разок в модели, но не придал значения. Исправим.
tl_mod_003
Прошил hex (без записи EEPROM)
При включении без температурного датчика ---.- потом 0.0. При включении с датчиком температуры ---.- потом текущая температура
всё так и задумано. tl_mod_003 не содержит логики отлова ошибок, он только показывает ---.- первые секунды до получения данных, так что не нужно эту версию проверять с отключенным датчиком
p/s tl_mod_002 - Отключение обоих управляющих портов PORTD.2 = 0; PORTD.3 = 0 не проверил, забыл :oops: Сейчас комп, на котором программатор занят, проверить не могу. Е0.1 и Е0.3 не знаю как можно смоделировать.
E0.1 - никак не смоделируешь без дополнительного оборудования.
E0.3 - в модели у меня получается, если стартовать с отключенным датчиком, и ровно через 6 секунд датчик подключить. Сначала показывает 0.0, потом Е0.2 (обрыв) и потом на пару секунд (6ая - 8ая) Е0.3. Потом, конечно, температуру.
p/s 2 Для себя я немного корректировал прошивку IYra termostat_led_5_40_0_4, там при обрыве датчика показания начинают мигать, если датчик потом читается, то отображается текущая температура (продолжает мигать до тех пор, пока не будет нажата одна из кнопок. Вроде очень информативно, так как если увидел, что показания мигают, то значит были проблемы и необходимо искать причину. Если видеть температуру и код возникшей ошибки... как именно лучше это отобразить пока нет предложений... то это даст повод на поиск возможных проблем).
Намек понял. Сделаем так - пока есть ошибка - показываем ошибку. Как пошли данные - моргаем. Нажатие на кнопку - моргание прекращаем. А последнюю замеченную ошибку показываем при переходе в режим изменения настроек (а он у нас будет строго по нажатию двух кнопок одновременно) - сначала настройки температуры, потом дельта, и последняя - отображение последней запомненной ошибки без возможности редактирования.
Осталось только втиснуть это в свободные 10 слов :-)

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

Posted: 08 Dec 2014 21:32
by IYra
propell_ant wrote: Осталось только втиснуть это в свободные 10 слов :-)
Попробуй упростить все свои if-ы
Вместо

Code: Select all

  if (ErrorCounter == 0 && w1buffer[0] == 0x50 && w1buffer[1] == 0x05)
использовать

Code: Select all

  if (ErrorCounter == 0)
  { 
    if ( w1buffer[0] == 0x50)
    {
       if (w1buffer[1] == 0x05)
       {
освободится еще десяток

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

Posted: 09 Dec 2014 06:34
by hardlock
IYra, ваша конструкция схавает больше памяти...

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

Posted: 09 Dec 2014 08:45
by IYra
hardlock wrote:IYra, ваша конструкция схавает больше памяти...
Ну я же не просто так ляпнул. Проверил на этом проекте.
У меня получилось 995 слов. Правда использовалась версия 2.05
Но и на старом CodeVision это работало

PS
Ну и еще попалась на глаза такая конструкция - Tnew = Tnew + 0;
наверно можно убрать

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

Posted: 09 Dec 2014 10:11
by propell_ant
IYra wrote:
hardlock wrote:IYra, ваша конструкция схавает больше памяти...
Ну я же не просто так ляпнул. Проверил на этом проекте.
У меня получилось 995 слов. Правда использовалась версия 2.05
Но и на старом CodeVision это работало
PS
Ну и еще попалась на глаза такая конструкция - Tnew = Tnew + 0;
наверно можно убрать
ой, у нас тут весь бомонд собирается :)
IYra wrote:Попробуй упростить все свои if-ы, использовать

Code: Select all

     if (ErrorCounter == 0)
      {
        if ( w1buffer[0] == 0x50)
        {
           if (w1buffer[1] == 0x05)
получилось, спасибо! "Tnew = Tnew + 0" тоже убрал, это какие-то остатки от борьбы с оптимизатором.
только я вот так написал, чтоб в одну строчку, как раньше

Code: Select all

  if (ErrorCounter == 0) if (w1buffer[0] == 0x50) if (w1buffer[1] == 0x05)
  {
а пришли пожалуйста проект под 2.05, самому жалко время тратить на подъем версии, а старый проект под 2.05 не компилится

PS Кстати, использование | и & вместо || и && (например if ((eeT_LoadOn > 2250) | (eeT_LoadOn < 450))) не только чревато малозаметными багами, но и кушает больше памяти
PSPS сейчас довел до 979 слов

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

Posted: 09 Dec 2014 14:17
by IYra
propell_ant wrote: пришли пожалуйста проект под 2.05, самому жалко время тратить на подъем версии, а старый проект под 2.05 не компилится
Там я добавил в kbd.c

Code: Select all

extern BYTE View;
extern BYTE Counter;
extern WORD T_LoadOn;
extern WORD DeltaT;
extern void RefreshDisplay(void);
и не пошла конструкция val = &w1buffer[0]; - ругалась на несоответствие типов
поставил немного по другому - int *val = (int*)w1buffer;
ЗЫ Где-то на форуме писал что код собранный под 2.05 получается меньше

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

Posted: 09 Dec 2014 21:37
by propell_ant
dandiv wrote:Огромное Вам Спасибо за доработку авторской hardlock прошивки!!! :good:
Это вам спасибо за тестирование!

И вот очередная версия на проверку:
propell_ant wrote:
dandiv wrote:В настройках 28.0 и d 1.0 (обе кнопки работают). Из меню регулировки температуры и ли дэльты не выходит (так и отображается выбранное меню).
это мой косяк, отлично! Видел такое разок в модели, но не придал значения. Исправим.
p/s 2 Для себя я немного корректировал прошивку IYra termostat_led_5_40_0_4, там при обрыве датчика показания начинают мигать, если датчик потом читается, то отображается текущая температура (продолжает мигать до тех пор, пока не будет нажата одна из кнопок. Вроде очень информативно, так как если увидел, что показания мигают, то значит были проблемы и необходимо искать причину. Если видеть температуру и код возникшей ошибки... как именно лучше это отобразить пока нет предложений... то это даст повод на поиск возможных проблем).
Намек понял. Сделаем так - пока есть ошибка - показываем ошибку. Как пошли данные - моргаем. Нажатие на кнопку - моргание прекращаем. А последнюю замеченную ошибку показываем при переходе в режим изменения настроек (а он у нас будет строго по нажатию двух кнопок одновременно) - сначала настройки температуры, потом дельта, и последняя - отображение последней запомненной ошибки без возможности редактирования.
Осталось только втиснуть это в свободные 10 слов :-)
Всё исправил, просмотр ошибки и мигание - добавил. Единственное отличие от запланированного - мигать начинает еще во время отображения ошибки. Но это наверно даже лучше. Заметнее.
Мигает без полного гашения, яркость меняется от 100% до где-то 50%, чтобы читалось хорошо.
И если прошивка настроена так, чтобы допускались одна или несколько ошибок без индикации, то работает так:
Допустим, мы используем настройку по умолчанию - единичную ошибку пропускать,
При обнаружении первой ошибки - ошибочные данные просто игнорируются (реле остаются как были), но номер ошибки запоминается. Снова делается запрос, снова ждем, читаем температуру.
Если прочиталось без ошибок - реле переключатся в соответствии с текущими настройками, а если перейти в настройки (ДВУМЯ кнопками одновременно. три раза) то можно посмотреть последний замеченный код ошибки.
Если прочиталось опять с ошибками - показываем E 0.X и моргаем. Моргаем пока не нажмем любую кнопку (или две сразу).

В последний момент заметил, что точка в первом разряде продолжает гореть если отображается ошибка - в принципе не страшно, но надо бы ее гасить.

перезалил исходники-прошивки, с учетом замечаний. Сделал мигание 2 раза в секунду - dandiv, сообщение об ошибке должно быть хоть чуть-чуть "напрягающим", а 1 раз в секунду - это примерно частота сердцебиения, поэтому мигание с такой частотой не напрягает. индикацию ошибки должен увидеть даже посторонний человек, если частота будет ненапряжной, он не придаст этому значения и никому не скажет.

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

Posted: 10 Dec 2014 08:35
by dandiv
Отчет:
(проверял только heat OA)
tl_mod_002b2
Прошил, при включении без температурного датчика ---.- потом ошибка Е0.2. При включении с датчиком температуры ---.- потом текущая температура. В настройках 28.0 и d 1.0. В меню регулировки температуры, дэльты и ошибки входит нажатием обоих кнопок. Кнопки во всех режимах работают. При замыкании на на землю отображается Е0.4. После устранения проблем с датчиком (обрыв или замыкание) отображается текущая температура, показания мигают (При появлении ошибки, она тоже мигает) до тех пор, пока не будет нажата кнопка (кнопки). При появлении ошибки нагрузка отключается, точка остается гореть, после устранения ошибки точка продолжает гореть даже если при текущей температуре нагрузка должна быть отключена (нагрузка отключена, точка горит). Если потом текущая температура разрешает включении нагрузки, то нагрузка включается, точка горит, при выходе текущей температуры из выбранного диапазона температур - нагрузка отключается, точка гаснет.

p/s Получается небольшая ошибочка с точкой и еще мне кажется слишком частое моргание показаний при возникновении ошибок (несколько раз в секунду). По яркости не могу пока сказать, возможно будет приятнее, если яркость не от 50% будет меняться, а с более низкого значения (при более медленном моргании возможно яркость не нужно будет менять. Нужно пробовать)

Добавлено спустя 51 минуту 46 секунд:
Заметил еще одну вещь... При опросе датчика индикатор немного меняет яркость (это вообще во всех прошивках, так что это не важно), а когда появляется ошибка начинаются мигания несколько раз в секунду с изменением яркости, да еще помаргивание при опросе датчика - не сильно красиво получается. Может не стоит яркость от 50% до 100% менять, а просто мигать? (Это мое мнение, может у кого-то другое)

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

Posted: 10 Dec 2014 08:44
by propell_ant
dandiv wrote:p/s Получается небольшая ошибочка с точкой и еще мне кажется слишком частое моргание показаний при возникновении ошибок (несколько раз в секунду). По яркости не могу пока сказать, возможно будет приятнее, если яркость не от 50% будет меняться, а с более низкого значения (при более медленном моргании возможно яркость не нужно будет менять. Нужно пробовать)
Спасибо!
Если вдруг кого-то припрет менять яркость именно в этом исходнике -
строка 47

Code: Select all

#define BlinkHalfPeriod   12 //примерно 4 моргания в секунду
но не больше 127, там дальше оно умножается на 2.
и строки 191 и 242

Code: Select all

  if (View == 0) if (ErrorDetected) if (DimmerCounter % 4 == 0)
делитель 4 для DimmerCounter определяет яркость. Поставите 2 - будет 35%, сейчас 4=60%

IYra, спасибо за 2.05, похоже понадобится.

Я пошел в глубокую отладку, нужно еще выковырять пару байт памяти и оттестить всё как следует, а не как сейчас.

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

Posted: 10 Dec 2014 14:28
by IYra
dandiv wrote: да еще помаргивание при опросе датчика
что-бы уменьшить моргание при опросе можно вставить в
for (i=0; i<9; i++)
{
w1buffer=w1_read();
ShowDisplayData1() ;
if (w1buffer != 0xFF)
{
Ff = 1;
}
if (w1buffer != 0x00)
{
NonZero = 1;
}
}
где ShowDisplayData1
void ShowDisplayData1(void)
{ BYTE i;
for (i=0; i<11; i++) //шоб не моргало изображение делаем обновление эрана 10 раз
{
ShowDisplayData();
}
}
ну и заменить везде циклы на вызов этой функции. Уменьшает код заодно.

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

Posted: 10 Dec 2014 15:26
by propell_ant
IYra wrote:
dandiv wrote: да еще помаргивание при опросе датчика
...
ну и заменить везде циклы на вызов этой функции. Уменьшает код заодно.
уже применено ;)

dandiv,
строка 400
вместо ShowDisplayData(); поставить ShowDisplayData11Times();
сейчас это максимум, чего можно добиться. Если получится освободить память, сделаем вообще без моргания