C платой пока не торопитесь. Может какие-то ноги придется перебросить туда-сюда, т.к. мне не нравится, что одна нога дисплея висит на PGC ноге МК, и кнопки на RX-TX подвешены. В исходнике я их все назначил в начале, поэтому изменить распиновку можно будет легким движением руки.
Вот, примерно накидал конфиг для 876-го, включил I2C, окультурил исходник... Протеус все это понял, но температуру мерит неверно. Например 20 гр. видит как 32 (20h=32d), а 21 град. у него уже 40. Никогда я с датчиками температуры дел не имел, надо по шагам идти, а я уже засыпаю, глаза закрываются так, что хоть спички вставляй
Может кто из посвященных посмотрит, подправит...
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Zhuk72 писал(а):Протеус все это понял, но температуру мерит неверно. Например 20 гр. видит как 32 (20h=32d), а 21 град. у него уже 40.
Вы считываете только 1 байт, а второй проверяете на 0x00 или 0xFF для знака, это неверно. Нужно читать 2 первых байта, они и будут температурой, умноженной на 16, а старший бит старшего байта будет знаком температуры. Вот примерчик на АСМе, гляньте.
Alex, тот код не мой. Я просто скопировал его с этой ссылки и слегка подкорректировал инициализацию портов с учетом другого МК, добавил конфиг-биты, ну и по мелочи кое-что.
Вполне возможно, что там была случайная или намеренная ошибка в коде. Я пока не разбирался.
Ваш пример посмотрю.
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Надеюсь спустя почти 10 часов можно написать следующее сообщение, не нарушая пункт 2.2
Причина неправильных показаний была в том, что в Протеусе стоял 18В20 вместо предусмотренного в схеме (и более не рекомендуемого к применению) 1820 без буквы. Достаточно в Протеусе сменить датчик на 18S20, как с температурой все встало на свои места.
Вот только непонятная у него логика, я о термостате. Если ставишь порог температуры 20 градусов, а температуру комнаты 25, ТЭН включается. При уменьшении температуры ниже пороговой - отключается. Надо либо бит порта инвертировать, либо транзистор сменить на обратный.
Дополнение.
Немного поторопился я.
Отрицательные температуры показывает неверно. Это первое и решаемое.
И второе непонятное: хотя в Протеусе выставил отрицательную температуру целую, в считанном байте в самом младшем разряде показывается 1. То ли глюк Протеуса, то ли к коде ошибка. Но т.к. с плюсовой температурой такого не происходит, то больше склоняюсь к первому.
Последний раз редактировалось AlekseyEnergo Пн апр 07, 2014 01:41:58, всего редактировалось 1 раз.
Причина:Нарушение пункта 2.2 правил форума.
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Дело не в отрицательном значении как таковом, а в том, что по даташиту 0.5 градуса представляются 1 в нулевом бите младшего байта, в случае же целого значения там должен быть 0. Это одинаково и для положительной, и для отрицательной температуры.
А Прот при целом значении отрицательной температуры в нулевом бите показывает 1, а при дробном (-XX.5 C) - 0. Если температура положительна, то все точно по даташиту.
Вчера написал свои процедуры преобразования данных с датчика, конвертации в разряды и вывод результата на дисплей, но они не состыковались с остальным кодом. Уже поздно было, поэтому не стал разбираться.
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Zhuk72 писал(а):
А Прот при целом значении отрицательной температуры в нулевом бите показывает 1, а при дробном (-XX.5 C) - 0. Если температура положительна, то все точно по даташиту.
Всё правильно, так и должно быть. Этот бит будет инверсным при отрицательной температуре.
А, Вы про младший байт. Чот я тупанул ...
Ну да, он не должен инвертироваться при инверсии знака.
Сейчас перепроверил. Да, действительно, у DS18S20 есть такое. Хотя DS18B20 так себя не ведёт, всё согласно даташиту.
Чудеса...
Последний раз редактировалось AlekseyEnergo Пн апр 07, 2014 01:42:23, всего редактировалось 1 раз.
Причина:Нарушение пункта 2.2 правил форума. Подредактировал.
Вот такой еще один предварительный вариант получился.
Исправил вывод на дисплей "-" температур, изменил конвертацию температуры, преобразование в 4 разряда (всё в конце asm файла), улучшил опрос кнопок (были глюкозы с ними), освободил ноги МК для RS232 и ICSP, ну и по мелочи кое-что.
Надо бы еще задействовать кнопку "-", но это в следующий раз будет.
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Включаются они вместе, да. Но только при первом пуске или при совпадении цикла. Но потом, управление насосом переходит в работу согласно пользовательских уставок, соотношение стоим/работаем. Нужно это для поднятия КПД системы в целом, так как чем больше времени дать теплоносителю на остывание в регистрах батарей, тем меньше будет работы у ТЭНов. Ну и насосу нет нужды качать постоянно. Например: выставили работа 5 мин., остановка 10. Система отключила нагрев, набрав нужную температуру. Идёт голая прокачка, мы "выгоняем" температуру из теплоносителя, прокачивая его насосом. Нет нужды пропускать его трижды через регистры, проще остановить и пусть остывает сам. Как только датчик видит снижение ниже уставки - включается нагрев. Но ТЭНы не должны греть локально, поэтому как только они запущены, должен включаться и насос. В итоге опять набрана температура и нагрев можно убрать, а насос возвращается в свой собственный алгоритм работы.
Ну собственно у меня котел так и работает. Если отопление включено, циркуляционный насос гоняет воду постоянно, а поджиг газа включается при опускании температуры воды ниже порога.
Посмотрю потом куда можно вставить команду на включение насоса.
Вы ориентируйтесь на последнюю схему, все изменения я буду делать в ней.
Кстати, если вдруг не заметили, кварц я поставил на 4 Мега, как в доноре, чтобы не пересчитывать временные задержки.
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Пока часы/таймер еще не готовы, включил насос на постоянной основе сразу после задания температуры. Включение производится высоким уровнем в отличии от ТЭНа, учтите это в исполнительной части. Если нужно, ТЭН тоже переведу на включение единицей. Или наоборот, насос нулем включу. Как вам удобнее.