DS18S20 и время преобразования температуры

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
grishiny
Родился
Сообщения: 7
Зарегистрирован: Вт июл 26, 2011 13:49:23
Откуда: Рязань

DS18S20 и время преобразования температуры

Сообщение grishiny »

Пользую CVAVR и его функцию ds1820_temperature_10 Суть программы такова: контроллер должен каждые 30 мс выдавать значение температуры с датчика DS18S20 в особо извращенной форме. Понятно, что вышеозначенный датчик не может так часто мерить температуру, поэтому реальный замер температуры происходит раз в 30 итераций (около 900 мс), а его значение присваевается переменной, которая потом и используется для вывода.
Но есть проблема. Функция преобразования температуры выполняется нереально долго для
этой задачи (около 750 мс, как в даташите и сказано). Как заставить МК быстро читать данные с DS18S20, а преобразование выполнять "в фоне"?
Т.е.
1. Прочитал данные предыдущего преобразования и запустил новое (не дожидаясь его окончания)
2. 30 раз (900 мс) выдаем прочитанные в п.1 данные
3. Снова с п.1
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: DS18S20 и время преобразования температуры

Сообщение Satyr »

grishiny писал(а):Но есть проблема. Функция преобразования температуры выполняется нереально долго для
этой задачи (около 750 мс, как в даташите и сказано). Как заставить МК быстро читать данные с DS18S20, а преобразование выполнять "в фоне"?

кто тебя заставляет ждать эти 750мс ?
Быстренько прочитай прошлое значение, инициируй новое преобразование, заведи таймер на через 750мс и это время спокойно обрабатывай прочие задачи.
Аватара пользователя
Kotische
Опытный кот
Сообщения: 885
Зарегистрирован: Сб июл 19, 2008 02:16:33
Откуда: Саратов

Re: DS18S20 и время преобразования температуры

Сообщение Kotische »

Там вроде флажок в регистре есть который сигнализирует о завершенном преобразовании и готовности данных к чтению.
grishiny
Родился
Сообщения: 7
Зарегистрирован: Вт июл 26, 2011 13:49:23
Откуда: Рязань

Re: DS18S20 и время преобразования температуры

Сообщение grishiny »

Satyr писал(а):кто тебя заставляет ждать эти 750мс ?

Функция ds1820_temperature_10 так работает.

Satyr писал(а):Быстренько прочитай прошлое значение, инициируй новое преобразование, заведи таймер на через 750мс и это время спокойно обрабатывай прочие задачи.

вот в том и вопрос. Как это сделать? Как прочитать? Забить на использование библиотеки ds1820.h (или как там она) и свою функцию считывания изобрести? На ассемблере вставку сделать?
grishiny
Родился
Сообщения: 7
Зарегистрирован: Вт июл 26, 2011 13:49:23
Откуда: Рязань

Re: DS18S20 и время преобразования температуры

Сообщение grishiny »

Kotische писал(а):Там вроде флажок в регистре есть который сигнализирует о завершенном преобразовании и готовности данных к чтению.

И вышеозначенная функция, очевидно, не дает ничему выполняться, пока не дождется его.
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: DS18S20 и время преобразования температуры

Сообщение Satyr »

Исходники есть этой функции? поменяй у нее конец с началом местами -))
чтоб в начале получал значение преобразования, а в конце инициировал новое преобразование.
вызывай по таймеру с интервалом не менее 750мс
Shutilla
Открыл глаза
Сообщения: 52
Зарегистрирован: Чт июл 03, 2008 12:34:48
Откуда: Волгоград

Re: DS18S20 и время преобразования температуры

Сообщение Shutilla »

Функция ds1820_temperature_10 объявлена в \lib\DS1820.LIB и там как раз стоит задержка в 550 мс. Разделите ее на "до" и "после" задержки, а между ними занимайтесь своими делами, не забывая про подсчет времени на преобразование температуры.
grishiny
Родился
Сообщения: 7
Зарегистрирован: Вт июл 26, 2011 13:49:23
Откуда: Рязань

Re: DS18S20 и время преобразования температуры

Сообщение grishiny »

Shutilla писал(а):Функция ds1820_temperature_10 объявлена в \lib\DS1820.LIB и там как раз стоит задержка в 550 мс. Разделите ее на "до" и "после" задержки, а между ними занимайтесь своими делами, не забывая про подсчет времени на преобразование температуры.


Спасибо! Буду ковырять.
eufs
Опытный кот
Сообщения: 772
Зарегистрирован: Вс апр 10, 2011 02:24:06
Откуда: г.Северодонецк

Re: DS18S20 и время преобразования температуры

Сообщение eufs »

Если точности 9 бит хватит, то можно перевести датчик на время измерения 93,75мс. Если это спасет, конечно.
C0FFEE=‭12648430‬
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: DS18S20 и время преобразования температуры

Сообщение Satyr »

eufs писал(а):Если точности 9 бит хватит, то можно перевести датчик на время измерения 93,75мс. Если это спасет, конечно.

См название темы. У него ds18S20, а не ds18B20
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: DS18S20 и время преобразования температуры

Сообщение pyzhman »

Код: Выделить всё

int ds1820_temperature_10(unsigned char *addr)
{
if (ds1820_select(addr)==0) return -9999;
w1_write(0x44);

//delay_ms(550);
TCCR0B= 0x01;//запускаем заранее проинициализированный таймер.
}

А в обработке по переполнению читаем показания, обнуляем TCNT и останавливаем таймер.
Docendo discimus
grishiny
Родился
Сообщения: 7
Зарегистрирован: Вт июл 26, 2011 13:49:23
Откуда: Рязань

Re: DS18S20 и время преобразования температуры

Сообщение grishiny »

Намучился с переставлением местами, никак не хотело работать. В конце концов заработало просто вот так:

Код: Выделить всё

if (ds1820_select(addr)==0) return -9999;
w1_write(0x44);
//delay_ms(550);
if (ds1820_read_spd(addr)==0) return -9999;
w1_init();
return (((int)__ds1820_scratch_pad.temp_msb<<8)|
       __ds1820_scratch_pad.temp_lsb)*5;
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: DS18S20 и время преобразования температуры

Сообщение pyzhman »

Так. Теперь, благодаря grishiny, мы знаем об избыточности 750мсек, о которых говорит даташит. Хотя там сказано о гарантированности результата.
Docendo discimus
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

Re: DS18S20 и время преобразования температуры

Сообщение Леонид Иванович »

pyzh_man писал(а):Так. Теперь, благодаря grishiny, мы знаем об избыточности 750мсек, о которых говорит даташит. Хотя там сказано о гарантированности результата.


О какой избыточности? Преобразование идет примерно такое время. Просто не обязательно внутри функции тупо ждать его окончания. Я вообще делаю запуск измерения по таймеру. "Считал измеренное значение, скопировал в переменную, откуда его можно брать в любое время, запустил новое измерение". Через 1 сек я повторяю эти действия.
svs39
Встал на лапы
Сообщения: 95
Зарегистрирован: Вс авг 22, 2010 09:23:08

Re: DS18S20 и время преобразования температуры

Сообщение svs39 »

Ничегонеработает писал(а):
pyzh_man писал(а):Так. Теперь, благодаря grishiny, мы знаем об избыточности 750мсек, о которых говорит даташит. Хотя там сказано о гарантированности результата.


О какой избыточности? Преобразование идет примерно такое время. Просто не обязательно внутри функции тупо ждать его окончания. Я вообще делаю запуск измерения по таймеру. "Считал измеренное значение, скопировал в переменную, откуда его можно брать в любое время, запустил новое измерение". Через 1 сек я повторяю эти действия.

И после запуска измерения можно делать что-угодно НЕ МЕНЕЕ 750 мс - ТОЛЬКО НЕЖЕЛАТЕЛЬНО шевелить бит порта 1WIRE
Закрыто

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