...Самое главное, чтобы нагреватель не оставался включенным. Иначе он поджарит что-нибудь ненароком
Так же, желательно продублировать защиту от перегрева термовыключателем типа такого: СпойлерВсякое может быть... Датчик физически отвалился от точки контроля температуры, недочёт в программе контроллера и т.д..
Здравствуйте! В очередной раз смею обратиться за помощью в написании простейшей программки...
А я вот не очень понял, о какой помощи вы говорите? Программировать Вы не умеете и учиться не собираетесь, даже современный Basic для Вас сложен, 600р. за DS1821 для Вас дорого, предложение wws63 за условные 1000р. для Вас также неприемлемо. Чем тут можно "помочь"? Какой будет Ваш вклад в данное? Отрисовка "желаемой" типовой схемы и работа девайса по "желаемому" Вами алгоритму? Или сколько Вы готовы за решение доплатить? Давайте посмеемся все вместе, если вышеуказанные суммы являются для Вас запредельными. Вот Вам самому халявщики нравятся?
попробовал, плохо - при обрывах и к.з. нагрев включен. Но в ТЗ (первом посте) об этом ни слова - может наоборот без нагрева все замерзнет. Можно и CRC - но пока по простецки, теперь при к.з. и обрыве нагрев не включается: Спойлер
#ifndef _XTAL_FREQ // Unless already defined assume 4MHz system frequency // This definition is required to calibrate __delay_us() and __delay_ms() #define _XTAL_FREQ 4000000U #endif #define ONE_WIRE_PORTIN GP1 #define ONE_WIRE_PORT GP1 #define ONE_WIRE_DDR TRISIO1 #define CONVERT_TEMP 0x44 #define WRITE_SCRATCHPAD 0x4E #define READ_SCRATCHPAD 0xBE #define COPY_SCRATCHPAD 0x48 #define RECALL_E2 0xB8 #define READ_POWER_SUPPLY 0xB4 #define SKIP_ROM 0xCC
int temperature; unsigned char ds18b20[9];
unsigned char OneWire_Init() { ONE_WIRE_DDR = 0; //Low LINE ONE_WIRE_PORT = 0; __delay_us(485); ONE_WIRE_DDR = 1; //Hi LINE __delay_us(70);
if (ONE_WIRE_PORTIN == 0) //Если ведомое уст-во ответило (PRESENCE PULSE) - заканчиваем этот тайм-слот (480мкс). { __delay_us(480); if (ONE_WIRE_PORTIN == 0) //Если линия так и продолжает быть в низком уровне - значит это либо ошибка, return 0; //либо на линии нет устр-в, а PRESENCE был ложным и вызван просто низким уровнем на линии. else //В таком случае естественно возвращаем 0 (ошибка / нет устр-в на шине), return 1; //либо 1 если все в порядке и это был "настоящий" PRESENCE PULSE. } else //Возвращаем 0 если отсутствовал вообще какой-либо намек на PRESENCE. return 0; }
з.ы. от всего не спасешься - доп. вывод действительно может помочь - делал терморегулятор инкубатора на симисторе, симистор может пробить, так стоит доп. реле, отрубающее силу при аварийной температуре.
Что? одни "коммерсанты" на форуме? Работы мизер. korob сейчас лень писать прожку, да и вам не горит. если не опередят - осенью в личку. тему отслеживать не буду - поэтому напомните.
_________________ Лучше умному тупить, чем тупому умничать
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
#ifndef _XTAL_FREQ // Unless already defined assume 4MHz system frequency // This definition is required to calibrate __delay_us() and __delay_ms() #define _XTAL_FREQ 4000000U #endif #define ONE_WIRE_PORTIN GP1 #define ONE_WIRE_PORT GP1 #define ONE_WIRE_DDR TRISIO1 #define CONVERT_TEMP 0x44 #define WRITE_SCRATCHPAD 0x4E #define READ_SCRATCHPAD 0xBE #define COPY_SCRATCHPAD 0x48 #define RECALL_E2 0xB8 #define READ_POWER_SUPPLY 0xB4 #define SKIP_ROM 0xCC
int temperature; unsigned char ds18b20[9];
unsigned char OneWire_Init() { ONE_WIRE_DDR = 0; //Low LINE ONE_WIRE_PORT = 0; __delay_us(485); ONE_WIRE_DDR = 1; //Hi LINE __delay_us(70);
if (ONE_WIRE_PORTIN == 0) //Если ведомое уст-во ответило (PRESENCE PULSE) - заканчиваем этот тайм-слот (480мкс). { __delay_us(480); if (ONE_WIRE_PORTIN == 0) //Если линия так и продолжает быть в низком уровне - значит это либо ошибка, return 0; //либо на линии нет устр-в, а PRESENCE был ложным и вызван просто низким уровнем на линии. else //В таком случае естественно возвращаем 0 (ошибка / нет устр-в на шине), return 1; //либо 1 если все в порядке и это был "настоящий" PRESENCE PULSE. } else //Возвращаем 0 если отсутствовал вообще какой-либо намек на PRESENCE. return 0; }
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Что? одни "коммерсанты" на форуме? Работы мизер...
Ну так сделайте, раз мизер. И дело не в деньгах вовсе, хотя время - самое ценное, что есть у человека. Сам подход порочный. Человек не просит научить его рыбачить, человек просит сразу рыбу. Причем не абы какую, а нужного ему сорта, веса и свежести. При наличии наработок, тут делов на полчаса. Если у Вас времени до хрена, то делайте. Я этого делать не стану из педагогических соображений.
P.S Никаких защит от обрывов и КЗ не нужно (датчик будет на плате с МК), а вот в процедуре опроса желательна защита от считывания ложных данных (проверка CRC). Хотя... В данном случае от неё тоже будет мало толку.
_________________ Большой опыт, порой, не даёт находить/видеть нам простые и очевидные решения. Всегда с уважением, Александр.
unsigned char OneWire_Init() { ONE_WIRE_DDR = 0; //Low LINE ONE_WIRE_PORT = 0; __delay_us(485); ONE_WIRE_DDR = 1; //Hi LINE __delay_us(70);
if (ONE_WIRE_PORTIN == 0) //Если ведомое уст-во ответило (PRESENCE PULSE) - заканчиваем этот тайм-слот (480мкс). { __delay_us(480); if (ONE_WIRE_PORTIN == 0) //Если линия так и продолжает быть в низком уровне - значит это либо ошибка, return 0; //либо на линии нет устр-в, а PRESENCE был ложным и вызван просто низким уровнем на линии. else //В таком случае естественно возвращаем 0 (ошибка / нет устр-в на шине), return 1; //либо 1 если все в порядке и это был "настоящий" PRESENCE PULSE. } else //Возвращаем 0 если отсутствовал вообще какой-либо намек на PRESENCE. return 0; }
Значит отчитываюсь: с моими DS18B20 работает со сдвигом температуры, включает нагрев примерно при 28...30°С и выключает при 32...34°С. Где то в формуле перевода температуры ошибка. Прошивка с проверкой CRC вообще не работает.
_________________ Большой опыт, порой, не даёт находить/видеть нам простые и очевидные решения. Всегда с уважением, Александр.
Да нет, работает чётко, только не в том диапазоне. Если бы что не так - то отключался бы нагрев, собственно так и происходит если коротнуть или отключить датчик.
_________________ Большой опыт, порой, не даёт находить/видеть нам простые и очевидные решения. Всегда с уважением, Александр.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения