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

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

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

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

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

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

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

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


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

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

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

Сообщение Mamonth »

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

Сообщение moLCHec »

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

Сообщение yaroslav »

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

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

Для работы с датчиком (DS18b20) использую встроенные в CodeVision AVR библиотеки, работают на ура.
Короче, во время преобразования температуры датчиком я вывожу на индикатор старое значение.
А каким образом? Ведь погаснуть должна индикация (кроме одного текущего знакоместа)?

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

Сообщение yaroslav »

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

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

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

Сообщение moLCHec »

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

Сообщение yaroslav »

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

Сообщение moLCHec »

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

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

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

Сообщение alex2103 »

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

Сообщение chief »

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

Сообщение alex2103 »

chief а с DS1820 работаете как? Если использовать стандартные библиотеки CV, то полюбому ошибки будут...
Просто в каждом прерывании разрешаю прерывание которое отвечает за индикацию. Само прерывание выполняется очень быстро и не создает проблем для снятия показаний с датчика (раз в 1 сек)
непонятно...каждый раз разрешаете...а где запрещаете? :)
Контактная информация:
Потрогал лапой паяльник
Сообщения: 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байта)
Прорезались зубы
Аватара пользователя
Сообщения: 219
Зарегистрирован: Вт сен 18, 2007 16:41:16
Откуда: Украина, г. Запорожье

Сообщение alex2103 »

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

Сообщение chief »

alex2103 писал(а):раз асм тогда вопросов нет :)
мне пишлось в библиотеке все процедуры чтения/записи 1-wire заключать в cli{}sei
а так что не работает?
Прорезались зубы
Аватара пользователя
Сообщения: 219
Зарегистрирован: Вт сен 18, 2007 16:41:16
Откуда: Украина, г. Запорожье

Сообщение alex2103 »

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

Сообщение chief »

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

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