Пока часы и термо
|
|
mikhail09p |
Дата: Вс, 05.09.2010, 20:35 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Доброго времени суток, спецы и не очень Такое дело: Начал делать теморегулятор с привязкой ко времени и столкнулся из неприятным явлением - при выводе в 1 строку выводит иногда пургу, а иногда виснет вовсе! Когда был один термодатчик, то я писал побелы после цифр... Короче, не пойму, может это Протеус, а то в железе ещё не успел попробывать? Может, оператор PRINT использует прерывания и кофликтует с прерываниями в программе? Нашол!!! Нужно так: If SetupFlag = 1 Then ; чтобы не тратить время процессора, раз в секунду SetupFlag = 0 Как включить два датчика для обработки одной подпрограммой, не подскажете?
Сообщение отредактировал
mikhail09p - Вс, 05.09.2010, 22:11
|
|
|
|
ivan_fd |
Дата: Вс, 05.09.2010, 22:30 | Сообщение # 2 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Quote (mikhail09p) Как включить два датчика для обработки одной подпрограммой, не подскажете? Сначала опрашиваете один датчик, выводите инфу. Потом другой, выводите инфу.... Или Вы хотите поставить 2 датчика на один порт?
|
|
|
|
mikhail09p |
Дата: Вс, 05.09.2010, 22:56 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Quote (ivan_fd) Сначала опрашиваете один датчик, выводите инфу. Потом другой, выводите инфу.... Или Вы хотите поставить 2 датчика на один порт? Как в подпрограмме разные порты писать? А два датчика на один порт сложно? Хотя портов хватает.
|
|
|
|
demanik |
Дата: Вс, 05.09.2010, 23:00 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
448
Замечания:
±
На сайте с 11.12.2007
Статус:
Offline
|
Предлагаю выбросить: REPEAT ' Начать внутренний цикл DELAYMS 25 ' Ждать окончания преобразования пока не придет бит, OREAD DQ, 4, [C] ' сигнализирующий об окончании преобразования UNTIL C > 0 ' Выйти из цикла если от DS18S20 поступил бит конца преобразования. А задействовать через таймер отсчет времени преобразования дтчика и тогда читать с него температуру. Так у Вас исчезнет огромная пауза (~750милисекунд!) в программе. Хотя хардварные прерывания игнорируют эту паузу остальная программа будет выполнятся без больших задержек.
Попробуй всё и вся... может быть пол...
|
|
|
|
mikhail09p |
Дата: Вс, 05.09.2010, 23:33 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Quote (demanik) А задействовать через таймер отсчет времени преобразования дтчика и тогда читать с него температуру. Просто сделать задержку? А сколько? И, кроме того, чтение температуры происходит раз в 10 сек. а в жизни поставлю в 20 или 30 сек.
Сообщение отредактировал
mikhail09p - Вс, 05.09.2010, 23:39
|
|
|
|
demanik |
Дата: Пн, 06.09.2010, 00:25 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
448
Замечания:
±
На сайте с 11.12.2007
Статус:
Offline
|
Quote (mikhail09p) Просто сделать задержку? А сколько? Больше 750 примерно 760-770 милисекунд. Quote (mikhail09p) И, кроме того, чтение температуры происходит раз в 10 сек. а в жизни поставлю в 20 или 30 сек Чем чаще будете опрашивать тем точнее будет теморегулятор. частота зависит от среды, температуру которой собираетесь поддерживать.
Попробуй всё и вся... может быть пол...
|
|
|
|
mikhail09p |
Дата: Пн, 06.09.2010, 22:01 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Больше 750 примерно 760-770 милисекунд. <br /> Погодите! А куда тогда подевается задержка в 750 мс??? <br /> <br /> Чем чаще будете опрашивать тем точнее будет теморегулятор. частота зависит от среды, температуру которой собираетесь поддерживать. Поддерживать собираюсь температуру воздуха в доме с помощью газового котла "Житомир". <br /> А насчёт точности - есть мысль сделать несколько опросов и вывести среднеквадратичное значение. Делал кто-нить такое? <p> И - вопрос остаётся в силе - Как включить два датчика для обработки одной подпрограммой?
Сообщение отредактировал
mikhail09p - Пн, 06.09.2010, 22:06
|
|
|
|
demanik |
Дата: Пн, 06.09.2010, 22:34 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
448
Замечания:
±
На сайте с 11.12.2007
Статус:
Offline
|
Quote (mikhail09p) Погодите! А куда тогда подевается задержка в 750 мс??? задержка в 750 мс это время нужно датчику для преобразования температуры. Смотрите документацию на датчик. Попорядку: 1. посылаем команду начало преобразования датчика1 2. обнуляем переменную счетчика времени преобразования датчика1, эта переменняа инкрементируется по прерыванию таймера 3. посылаем команду начало преобразования датчика2 4. обнуляем переменную счетчика времени преобразования датчика2, эта переменняа инкрементируется по прерыванию таймера дальше эти четыре пункта игнорируются пока не прочитаем температуру 5. если переменная счетчика времени преобразования датчика1 насчитала больше 760-770 милисекунд посылаем команду читать температуру и принимаем температуру 6. аналогично п.5 только датчика2 7. остальная программа ... 8. переход к п.1
Попробуй всё и вся... может быть пол...
|
|
|
|
demanik |
Дата: Пн, 06.09.2010, 22:44 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
448
Замечания:
±
На сайте с 11.12.2007
Статус:
Offline
|
Quote (mikhail09p) Поддерживать собираюсь температуру воздуха в доме с помощью газового котла "Житомир". Температура воздуха в комнате меняется сравнительно медленно, Я думаю мерять раз в 5-10секунд не помешает. Я всегда после приема температуры сразу опять запускаю начало преобразования и время опроса получается меньше секунды. Quote (mikhail09p) при выводе в 1 строку выводит иногда пургу, а иногда виснет вовсе! Такая хрень от хардварных прерываний они могут перервать посылку к дисплею в любое время.
Попробуй всё и вся... может быть пол...
|
|
|
|
mikhail09p |
Дата: Пн, 06.09.2010, 22:45 | Сообщение # 10 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Quote (demanik) 5. если переменная счетчика времени преобразования датчика1 насчитала больше 760-770 милисекунд посылаем команду читать температуру и принимаем температуру Это ж можно сделать спустя секунду - они у нас уже инкременуются! Надо будет завтра попробывать реализовать. Отпадает мой последний вопрос.
Сообщение отредактировал
mikhail09p - Пн, 06.09.2010, 22:46
|
|
|
|
demanik |
Дата: Пн, 06.09.2010, 22:47 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
448
Замечания:
±
На сайте с 11.12.2007
Статус:
Offline
|
Quote (mikhail09p) Как в подпрограмме разные порты писать? они у вас уже написаны: SYMBOL DQ = PORTC.0 ' Подключить 1 DS18B20 к выводу PORTc.0 SYMBOL DQ2 =PORTC.1 ' Подключить 2 DS18B20 к выводу PORTc.1
Попробуй всё и вся... может быть пол...
|
|
|
|
mikhail09p |
Дата: Пн, 06.09.2010, 22:58 | Сообщение # 12 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Quote (demanik) Такая хрень от хардварных прерываний они могут перервать посылку к дисплею в любое время. А если на время вывода на дисплей запрещать прерывания (DISEBLE), а потом разрешать (ENEBLE) ?Добавлено (06.09.2010, 22.58.40) ---------------------------------------------
Quote (demanik) они у вас уже написаны: SYMBOL DQ = PORTC.0 ' Подключить 1 DS18B20 к выводу PORTc.0 SYMBOL DQ2 =PORTC.1 ' Подключить 2 DS18B20 к выводу PORTc.1 Я понял.
|
|
|
|
demanik |
Дата: Пн, 06.09.2010, 23:02 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
448
Замечания:
±
На сайте с 11.12.2007
Статус:
Offline
|
Quote (mikhail09p) А если на время вывода на дисплей запрещать прерывания (DISEBLE), а потом разрешать (ENEBLE) ? GIE = 0 PRINT... GIE = 1 Но точность часов захромает. Проще использовать внешние часы с батарейкой и не будет проблем с пропаданием питания.
Попробуй всё и вся... может быть пол...
|
|
|
|
mikhail09p |
Дата: Пн, 06.09.2010, 23:04 | Сообщение # 14 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Quote (demanik) 1. посылаем команду начало преобразования датчика1 2. обнуляем переменную счетчика времени преобразования датчика1, эта переменняа инкрементируется по прерыванию таймера 3. посылаем команду начало преобразования датчика2 4. обнуляем переменную счетчика времени преобразования датчика2, эта переменняа инкрементируется по прерыванию таймера дальше эти четыре пункта игнорируются пока не прочитаем температуру 5. если переменная счетчика времени преобразования датчика1 насчитала больше 760-770 милисекунд посылаем команду читать температуру и принимаем температуру 6. аналогично п.5 только датчика2 7. остальная программа ... 8. переход к п.1 А ведь между 4 и 5 пунктами можно поместить часть программы. Или есть подводные камни?
|
|
|
|
demanik |
Дата: Пн, 06.09.2010, 23:07 | Сообщение # 15 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
448
Замечания:
±
На сайте с 11.12.2007
Статус:
Offline
|
Quote (mikhail09p) А ведь между 4 и 5 пунктами можно поместить часть программы Без проблем.
Попробуй всё и вся... может быть пол...
|
|
|
|