Динамическая индикация + термометр DS18B20

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
Pavel V.
Мявтор!
Сообщения: 384
Зарегистрирован: Ср май 17, 2006 18:39:01
Откуда: Москва
Контактная информация:

Динамическая индикация + термометр DS18B20

Сообщение Pavel V. »

Доброго времени суток!
У меня вот какой вопрос. В моем устройстве используется датчик температуры DS18B20 (тот, что 1-wire) совместно с динамической индикацией.

Динамическая индикация работает по прерыванию переполнения таймера.

Для считывания температуры с датчика, необходимо от 200 до 800 мс (в зависимости от разрешения). Прерывания от Д.И. случаются чаще, соответственно результат измерения температуры не всегда корректен.

На данный момент проблему решил выключением Д.И. на время процедуры измерения температуры (меряю ее в прерывании где-то раз в 10 сек). Но неприятно, что индикаторы гаснут.

Интересно, кто-нибудь сталкивался с подобным? Может быть есть какие-то варианты?


И еще вопрос - существуют ли некие аппаратные контроллеры 7-сегм. индикаторов, чтобы обойтись без динамической?
МИК
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Вс июн 18, 2006 05:17:06

Сообщение МИК »

Специализированные контроллеры наверное есть, но в похожих случаях не забиваю голову поиском экзотики, да еще со всякими не всегда устраевающими меня ограничениями. Беру второй, подходящий мк, зашиваю что надо, стыкую с основным мк, и все что надо он отрабатывает.
Аватара пользователя
Mamonth
Вымогатель припоя
Сообщения: 534
Зарегистрирован: Пн янв 16, 2006 08:00:17
Откуда: Иркутск

Сообщение Mamonth »

Подскажи как работал с DS18B20 у меня чего-то не получилось. )) Если не секрет конечно.
Today fine night...
Аватара пользователя
moLCHec
Мявтор!
Сообщения: 825
Зарегистрирован: Вс дек 18, 2005 20:04:42
Откуда: Свердловская обл.
Контактная информация:

Сообщение moLCHec »

И я б не отказался посмотреть как 1-wire юзают. А если у тебя MEGA16 или выше то там мона асинхронно запустить T2. у меня на 1 Гц работает и не жалуется пока. Ставишь кварц и устанавливаешь нужный делитель. А вообще можно заюзать есчё один счётчик с приоритетом пониже и его под данную задержку настроить. Какой контроллер то .
Настоящий кот всегда либо голоден,
либо невыспался ...
Аватара пользователя
yaroslav
Встал на лапы
Сообщения: 85
Зарегистрирован: Пт май 26, 2006 23:28:37
Откуда: Харьков

Сообщение yaroslav »

Вот я делал терморегулятор для холодильника. Как раз на DS18B20, плюс МК PIC16F84A (AVRы, к сожалению, не юзаю). 1-wire работает на ура, а вот динамическая индикация слегка "подмигивает", хотя и не все замечают. Считывание температуры - раз в секунду. Обновление показаний индикатора - постоянно, как только возможно. Короче, во время преобразования температуры датчиком я вывожу на индикатор старое значение. Как только получено новое значение - вывожу его на индикатор. С прерываниями ваааще не связан (даже отключаю их нафиг).
Индикатор светодиодный, семисегментный, 4-разрядный. Для вывода значений использую сдвиговый регистр К555ИР8. Всего на индикации задействовано 6 выводов МК - 2 на регистр и 4 на катоды разрядов.
Пока всё работает, уже второй год.
Аватара пользователя
Pavel V.
Мявтор!
Сообщения: 384
Зарегистрирован: Ср май 17, 2006 18:39:01
Откуда: Москва
Контактная информация:

Сообщение Pavel V. »

Для работы с датчиком (DS18b20) использую встроенные в CodeVision AVR библиотеки, работают на ура.

Короче, во время преобразования температуры датчиком я вывожу на индикатор старое значение.

А каким образом? Ведь погаснуть должна индикация (кроме одного текущего знакоместа)?

Контроллер - mega8.
Аватара пользователя
yaroslav
Встал на лапы
Сообщения: 85
Зарегистрирован: Пт май 26, 2006 23:28:37
Откуда: Харьков

Сообщение yaroslav »

Pavel V. писал(а):
Короче, во время преобразования температуры датчиком я вывожу на индикатор старое значение.

А каким образом? Ведь погаснуть должна индикация (кроме одного текущего знакоместа)?


Я соображал так:
1) запускаю преобразование температуры на датчике (а это как-никак 750 мс идёт при 12-битном разрешении);
2) вызываю процедуру вывода значений на индикатор (она делает один проход по всем знакоместам индикатора);
3) проверяю - не готово ли новое значение температуры (датчик должен то ли поднять, то ли опустить уровень на шине 1-wire, уже не помню);
4) если датчик ещё не готов выдать новое значение температуры (ещё идёт преобразование), то перехожу ко второму пункту;
5) иначе (датчик закончил преобразование) обрабатываю и вывожу на индикатор новое значение температуры - вот, собственно, и всё.
Итого, за время преобразования (750 мс) я успеваю раз 50 вывести старые значения на индикатор, поэтому и мигание особенно не заметно.
Такое может не прокатить если датчик имеет паразитное питание, т.е. питание от шины данных. В таком случае во время преобразования температуры нужно удерживать на шине данных высокий уровень, что исключает возможность опроса состояния датчика во время преобразования. Тут уж нужно точно отсчитывать время и только после этого считывать данные с датчика.
Аватара пользователя
Pavel V.
Мявтор!
Сообщения: 384
Зарегистрирован: Ср май 17, 2006 18:39:01
Откуда: Москва
Контактная информация:

Сообщение Pavel V. »

Спасибо, Ярослав! Буду думать теперь как все лучше сделать:)
Аватара пользователя
moLCHec
Мявтор!
Сообщения: 825
Зарегистрирован: Вс дек 18, 2005 20:04:42
Откуда: Свердловская обл.
Контактная информация:

Сообщение moLCHec »

Исходником работы с 1-Wire не поделишся.??
Настоящий кот всегда либо голоден,
либо невыспался ...
Аватара пользователя
yaroslav
Встал на лапы
Сообщения: 85
Зарегистрирован: Пт май 26, 2006 23:28:37
Откуда: Харьков

Сообщение yaroslav »

moLCHec писал(а):Исходником работы с 1-Wire не поделишся.??


Если это ко мне вопрос, то могу поискать :). Но вот только прога на асме для PICов. И ROM-команды там не реализованы - только SkipROM (пропуск команды) работает, т.к. датчик у меня был один и мучаться каждый раз с инициализацией его единственного и неповторимого :)) было влом. Но для одного датчика этого хватает, то если датчиков несколько - тогда нужно соображать всякие MatchROM, ReadROM и т.д. и т.п.
А вообще, была в инете прога для работы с этими датчиками - TempKeeper называется. Полная версия платная, демо версия, соответственно, халявная, но и функций там поменьше (типа работа только с одним или двумя датчиками, отсутствие логов всяких, уже не помню). Для начала сойдёт, а там мож чё своё сварганить можно будет :)
Аватара пользователя
moLCHec
Мявтор!
Сообщения: 825
Зарегистрирован: Вс дек 18, 2005 20:04:42
Откуда: Свердловская обл.
Контактная информация:

Сообщение moLCHec »

да нет я к автору темы обращался. Вообще я не понимаю что у него не получается у m8 3 таймера(Т0,Т1,Т2). У T1 есчё вроде А и В cчётные регистры. установил на каждый своё прерывание и всё. Одним прерыванием читаешь температуру заносишь в глобальную переменную и запускаешь следущее преобразование, Другим отображаешь содержимое глобальной переменной.
Настоящий кот всегда либо голоден,
либо невыспался ...
Аватара пользователя
Pavel V.
Мявтор!
Сообщения: 384
Зарегистрирован: Ср май 17, 2006 18:39:01
Откуда: Москва
Контактная информация:

Сообщение Pavel V. »

В CodeVision, насколько я понял, встроенные функции для работы с 1-Wire, так что делиться нечем..
Аватара пользователя
alex2103
Прорезались зубы
Сообщения: 219
Зарегистрирован: Вт сен 18, 2007 16:41:16
Откуда: Украина, г. Запорожье
Контактная информация:

Сообщение alex2103 »

Только что делал термостат на Меге8+DS18b20+3 семисегментника.
Тоже столкнулся с проблемой, когда ведется измерение температуры, то приходится выключать индикацию.
В итоге все поборол подправлением встроеных библиотек CV.
Если еще актуально, то могу поделиться.
chief
Потрогал лапой паяльник
Сообщения: 397
Зарегистрирован: Ср сен 19, 2007 09:21:04

Сообщение chief »

сейчас делаю терморегулятор для электро-котла. Mega8+DS1820+динамическая индикация. Ничего не отключаю.
Просто в каждом прерывании разрешаю прерывание которое отвечает за индикацию. Само прерывание выполняется очень быстро и не создает проблем для снятия показаний с датчика (раз в 1 сек)
Аватара пользователя
alex2103
Прорезались зубы
Сообщения: 219
Зарегистрирован: Вт сен 18, 2007 16:41:16
Откуда: Украина, г. Запорожье
Контактная информация:

Сообщение alex2103 »

chief а с DS1820 работаете как? Если использовать стандартные библиотеки CV, то полюбому ошибки будут...
Просто в каждом прерывании разрешаю прерывание которое отвечает за индикацию. Само прерывание выполняется очень быстро и не создает проблем для снятия показаний с датчика (раз в 1 сек)

непонятно...каждый раз разрешаете...а где запрещаете? :)
chief
Потрогал лапой паяльник
Сообщения: 397
Зарегистрирован: Ср сен 19, 2007 09:21:04

Сообщение chief »

alex2103 писал(а):chief а с DS1820 работаете как? Если использовать стандартные библиотеки CV, то полюбому ошибки будут...
Просто в каждом прерывании разрешаю прерывание которое отвечает за индикацию. Само прерывание выполняется очень быстро и не создает проблем для снятия показаний с датчика (раз в 1 сек)

непонятно...каждый раз разрешаете...а где запрещаете? :)

Дело в том что пишу на асме. А как известно при вызове прерывания автоматически выполняется команда "cli" - запрещение всех прерываний. И только после выхода из прерывания командой ''reti'' прерывания опять разрешаются (если до этого они были разрешены). Таким образом насильно разрешая прерывания в процедуре обработчика таймера 1 (опрос термодатчика), я разрешаю прерывания от таймера 2 (ну и от всех остальных конечно тоже), где отрабатывается динамическая индикация и опрос клавиатуры. Таким образом даже когда происходит опрос термодатчика у меня происходят прерывания то таймера 2 и свободно происходит отображение значения. Как я уже говорил выше, прерывание выполняется 7.25 мкс и не дает сбоев при опросе термодатчика. DS1820 использую так как есть под рукой. Отличия от DS18B20 в точности 0.5 С. Т.е. для перевода в целочисельный формат результат первого байта нужно сдвинуть один раз вправо. Ау DS18B20 4 раза (2байта)
Аватара пользователя
alex2103
Прорезались зубы
Сообщения: 219
Зарегистрирован: Вт сен 18, 2007 16:41:16
Откуда: Украина, г. Запорожье
Контактная информация:

Сообщение alex2103 »

раз асм тогда вопросов нет :)
мне пишлось в библиотеке все процедуры чтения/записи 1-wire заключать в cli{}sei
chief
Потрогал лапой паяльник
Сообщения: 397
Зарегистрирован: Ср сен 19, 2007 09:21:04

Сообщение chief »

alex2103 писал(а):раз асм тогда вопросов нет :)
мне пишлось в библиотеке все процедуры чтения/записи 1-wire заключать в cli{}sei

а так что не работает?
Аватара пользователя
alex2103
Прорезались зубы
Сообщения: 219
Зарегистрирован: Вт сен 18, 2007 16:41:16
Откуда: Украина, г. Запорожье
Контактная информация:

Сообщение alex2103 »

а так что не работает?

неа...чтоб получить достоверную температуру приходилось останавливать индикацию :(
chief
Потрогал лапой паяльник
Сообщения: 397
Зарегистрирован: Ср сен 19, 2007 09:21:04

Сообщение chief »

alex2103 писал(а):
а так что не работает?

неа...чтоб получить достоверную температуру приходилось останавливать индикацию :(

Странно. Тайминги там не такие уж и критичные. Единственно возможно в твоей функции постоянно идет опрос готовности, а я тупо жду 750 мс. В данном случае асм рулит. Попробуй ассемблерную вставку. Функции могу скинуть.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»