24 февраля 2022 года в 5 утра, без объявления войны, россия напала на Украину.

Они пришли "освобождать народ от нацистов и националистов".
С этого момента наша жизнь изменилась на "до" и "после".
Нас освобождают от наших домов, от наших любимых, от наших родителей и от наших детей....
Тут я не буду никого агитировать или переубеждать, разумный человек найдёт всю информацию
в интернете, а для зомби никакие доводы и факты не послужат аргументом.

Я не умею много писать, да и без мата тут сложно что-то написать.
Поэтому выражу все мои чувства одним фото.

«Спасибо дедушка путин за счастливое детство и мое освобождение». ©

Дополню словами уважаемого человека, широко известного в узких кругах:
тут путин не виноват, не он нажал на кнопку сброса,
- виноват пилот, который нажал на кнопку сброса, мог промахнуться. виноваты жена/мать/брат/друг пилота, которые не позвонили ему, и не сказали "нет войне",
- виноват тот, кто отдал приказ, и виноваты его жена/мать/брат/друг,
- виноват тот, кто цеплял бомбу, потому что он мог её обезвредить, "ну бывает, не сработала",
- виноват кладовщик, виноват водитель, который перевозил эту бомбу. виноваты жена...и т.д., потому что не позвонили и не сказали "нет войне, не вези бомбы",
- виноваты все журналисты оркостана, потому что они врут,
- виноваты недограждане, потому что не сказали журналистам "не врите",
- виноваты все... все 160 миллионов,
- а те 2, 3, 5 тысяч, которые вышли, и которых запаковали, это даже не десятая процента, это погрешность... случайно оказавшиеся в мордоре люди. ©

PS: За несколько часов до вторжения был атакован и взломан крупный интернет хостинг в Киеве, где и размещался мой сайт. Только 16 марта отважным админам удалось частично восстановить работу хостинга. Далеко не все сайты выжили, т.к. были повреждены даже бэкапы.
Нет, нет, я не жалуюсь, нет. В цифровом мире нет ничего ценного, материального...


Due to periodic DDoS attacks, the forum may not be available.

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

Здесь только проекты на ATtiny
Post Reply
propell_ant
Живу тут
Posts: 490
Joined: 03 Jun 2014 09:22

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

Post 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
Attachments
hex-2019-09-12-18-27.rar
прошивки
(100.08 KiB) Downloaded 15 times
src-2019-09-12-18-27.rar
исходники
(121.07 KiB) Downloaded 10 times
Last edited by propell_ant on 08 Dec 2014 20:33, edited 7 times in total.
propell_ant
Живу тут
Posts: 490
Joined: 03 Jun 2014 09:22

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

Post 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 не прошился – пробовать еще раз его прошить
Last edited by propell_ant on 08 Dec 2014 11:02, edited 1 time in total.
propell_ant
Живу тут
Posts: 490
Joined: 03 Jun 2014 09:22

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

Post by propell_ant »

зарезервировано
dandiv
Частенько бываю
Posts: 58
Joined: 14 Feb 2012 07:46

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

Post by dandiv »

Я так понимаю при включении на дисплее 0.0 и нет защиты от обрыва датчика, т.е. оригинальная прошивка от hardlock просто исправлен глюк с кнопкой при проблемах с EEPROM?
propell_ant
Живу тут
Posts: 490
Joined: 03 Jun 2014 09:22

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

Post by propell_ant »

dandiv wrote:оригинальная прошивка от hardlock просто исправлен глюк с кнопкой при проблемах с EEPROM?
ага.
Обрыв и 0.0 добавил в работу.
dandiv
Частенько бываю
Posts: 58
Joined: 14 Feb 2012 07:46

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

Post by dandiv »

Прошил tl_mod_001 - Работает!
dandiv
Частенько бываю
Posts: 58
Joined: 14 Feb 2012 07:46

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

Post 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 не прошился – пробовать еще раз его прошить
georg77
Частенько бываю
Posts: 123
Joined: 26 Nov 2011 05:38

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

Post by georg77 »

весьма опасная фича - слишком лёгкий вход в режим установки температуры термотата - простое нажатие любой из 2-х кнопок
может вызвать беду при попадании влаги, падении посторонних предметов, баловства детей
я переделал вход в этот режим так что можно войти только при нажатии 2-х кнопок одновременно (как в режим установки дельты)
к сожалению под рукой нет исходника с переделкой
propell_ant
Живу тут
Posts: 490
Joined: 03 Jun 2014 09:22

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

Post by propell_ant »

georg77 wrote:весьма опасная фича - слишком лёгкий вход в режим установки температуры термотата - простое нажатие любой из 2-х кнопок
...
к сожалению под рукой нет исходника с переделкой
там всё просто, даже размер прошивки (почти) не поменяется. Я наверно включу по умолчанию вход в настройки по двум кнопкам. Надо подумать, что делать с такими переделками, народ же комбинировать захочет.
User avatar
hardlock
Администратор
Posts: 3978
Joined: 21 Jan 2009 14:48
Location: Minsk - zp.ua
Contact:

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

Post by hardlock »

propell_ant, отличная ветка! Так держать. Я к сожалению пока всё дальше от этого... :(
propell_ant
Живу тут
Posts: 490
Joined: 03 Jun 2014 09:22

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

Post 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
прошивка для нагревателя и исходники - в аттаче
Attachments
tl_mod_003_src_and_hex.rar
(13.36 KiB) Downloaded 796 times
tl_v4.0.0_src_and_hex.rar
это всё есть в архиве в 1-м посте
(20.66 KiB) Downloaded 807 times
Last edited by propell_ant on 08 Dec 2014 11:19, edited 3 times in total.
dandiv
Частенько бываю
Posts: 58
Joined: 14 Feb 2012 07:46

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

Post by dandiv »

propell_ant Проверить смогу только вечером, дома он остался
propell_ant
Живу тут
Posts: 490
Joined: 03 Jun 2014 09:22

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

Post by propell_ant »

hardlock wrote:propell_ant, отличная ветка! Так держать. Я к сожалению пока всё дальше от этого... :(
hardlock, спасибо!
Вам просто нужен модератор в пару веток - трафик небольшой, но реакция на исправления народу всё-таки требуется.
dandiv
Частенько бываю
Posts: 58
Joined: 14 Feb 2012 07:46

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

Post 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:
propell_ant
Живу тут
Posts: 490
Joined: 03 Jun 2014 09:22

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

Post 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 слов :-)
IYra
Живу тут
Posts: 712
Joined: 01 Feb 2012 18:36
Location: Санкт-Петербург

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

Post 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)
       {
освободится еще десяток
User avatar
hardlock
Администратор
Posts: 3978
Joined: 21 Jan 2009 14:48
Location: Minsk - zp.ua
Contact:

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

Post by hardlock »

IYra, ваша конструкция схавает больше памяти...
IYra
Живу тут
Posts: 712
Joined: 01 Feb 2012 18:36
Location: Санкт-Петербург

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

Post by IYra »

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

PS
Ну и еще попалась на глаза такая конструкция - Tnew = Tnew + 0;
наверно можно убрать
propell_ant
Живу тут
Posts: 490
Joined: 03 Jun 2014 09:22

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

Post 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 слов
IYra
Живу тут
Posts: 712
Joined: 01 Feb 2012 18:36
Location: Санкт-Петербург

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

Post 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 получается меньше
Attachments
tl_mod_002_ver205.rar
Проект для CVR 2.05
(11.89 KiB) Downloaded 731 times
propell_ant
Живу тут
Posts: 490
Joined: 03 Jun 2014 09:22

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

Post 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 раз в секунду - это примерно частота сердцебиения, поэтому мигание с такой частотой не напрягает. индикацию ошибки должен увидеть даже посторонний человек, если частота будет ненапряжной, он не придаст этому значения и никому не скажет.
Attachments
tl_v4.0.3_src_and_hex.rar
это всё есть в архиве в 1-м посте
(20.93 KiB) Downloaded 827 times
Last edited by propell_ant on 30 Dec 2014 10:13, edited 5 times in total.
Reason: оформлено в новую версию (v4.0.3)
dandiv
Частенько бываю
Posts: 58
Joined: 14 Feb 2012 07:46

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

Post by dandiv »

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

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

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

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

Post 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, похоже понадобится.

Я пошел в глубокую отладку, нужно еще выковырять пару байт памяти и оттестить всё как следует, а не как сейчас.
IYra
Живу тут
Posts: 712
Joined: 01 Feb 2012 18:36
Location: Санкт-Петербург

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

Post 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();
}
}
ну и заменить везде циклы на вызов этой функции. Уменьшает код заодно.
propell_ant
Живу тут
Posts: 490
Joined: 03 Jun 2014 09:22

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

Post by propell_ant »

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

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