Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
16.12.2009, 22:01
|
|
Прописка
Регистрация: 14.01.2008
Сообщений: 121
Сказал спасибо: 1
Сказали Спасибо 19 раз(а) в 18 сообщении(ях)
|
Пмогите разобраться
Доброго времени суток! Сижу я здесь, кручу девайсик, типа термометра, и возник такой вопросик:
Прогу пишу в CodeVision, датчик температуры DS18B20, соответственно и библиотеку прикрутил "DS18B20.h". Есто там такая хитрая функция
float ds18b20_temperature(unsigned char *addr)
и никак не могу разобраться, что она выдает на выходе? температуру в градусах цельсия или просто тот двухбайтный код, который хранится в темрературных регистрах датчика? Нигде не могу найти описание этой функции... Подскажите плиз, кто что знает...
Заранее благодарен.
|
|
|
|
16.12.2009, 22:18
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.11.2008
Адрес: г.Смоленск
Сообщений: 2,018
Сказал спасибо: 348
Сказали Спасибо 1,024 раз(а) в 552 сообщении(ях)
|
Re: Пмогите разобраться
Что тут искать???
Help CVAvr
Вчитайтесь
float ds18b20_temperature(unsigned char *addr)
this function returns the temperature of the DS18B20 sensor with the ROM code stored in an array of 8 bytes located at address addr.
The temperature is measured in °C. In case of error the function returns the value -9999.
If only one DS18B20 sensor is used, no ROM code array is necessary and the pointer addr must be NULL (0).
Prior on calling the the ds18b20_temperature function for the first time, the ds18b20_init function must be used to specify the desired temperature measurement resolution.
If more several sensors are used, then the program must first identify the ROM codes for all the sensors.
Only after that the ds18b20_temperature function may be used, with the addr pointer pointing to the array which holds the ROM code for the needed device.
Или
эта функция возвращает температуру датчика DS18B20 с кодом ROM, сохраненным в массиве 8 байтов, расположенных в адресе addr.
Температура измерена в °C. В случае ошибки функция возвращает значение-9999.
Если только один датчик DS18B20 используется, никакой массив кода ROM не необходим, и указатель addr должен быть НУЛЕВОЙ (0).
Предшествующий при запросе функция ds18b20_temperature впервые, функция ds18b20_init должна использоваться, чтобы определить желательную температурную разрешающую способность измерения.
Если больше несколько датчиков используются, то программа должна сначала идентифицировать коды ROM для всех датчиков.
Только после этого функция ds18b20_temperature может использоваться, с addr указателем, указывающим на массив, который держит код ROM для необходимого устройства
|
|
|
|
16.12.2009, 23:57
|
|
Прописка
Регистрация: 14.01.2008
Сообщений: 121
Сказал спасибо: 1
Сказали Спасибо 19 раз(а) в 18 сообщении(ях)
|
Re: Пмогите разобраться
Спасибо большое за помощь.
Т.е. Если температура будет - 5 гр. Цельсия, например, то функция выдаст - 5 (в десятичном измерении), а если будет +10, то результат функции будет 10 (в десятичном измерении)? Я правильно понял?
И еще вопросик: если больше одного датчика, например три, то как они будут располагаться в массиве ROM-кодов, по возрастанию их серийных номеров или по тому, кто первый из низ откликнулся, тот первым и попал в массив?
Например есть два датчика, прикрученных к одной линии, один находится в доме, другой на улице. Командой
devices = w1_search(0xf0,&rom_codes[0][0]); я их запихнул в массив. Какой из них rom_codes[0][0] или rom_codes[1][0] будет соответствовать датчику на улице? а какой в доме?
|
|
|
|
17.12.2009, 00:03
|
|
Прописка
Регистрация: 14.01.2008
Сообщений: 121
Сказал спасибо: 1
Сказали Спасибо 19 раз(а) в 18 сообщении(ях)
|
Re: Пмогите разобраться
В интернете я встречал такую конструкцию
float read_temp(unsigned char number)
{
float temp;
temp = ds18b20_temperature(&rom_codes [number][0]);
if (temp › 1000) // если температура отрицательная
{
temp = 4096 - temp;
temp = -temp;
}
return temp;
Откуда взяты эти числа (1000 и 4096) для отрицательных температур, если функция выдает "float", а значит и отрицательные числа она должна выдавать нормально...
|
|
|
|
17.12.2009, 00:12
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.11.2008
Адрес: г.Смоленск
Сообщений: 2,018
Сказал спасибо: 348
Сказали Спасибо 1,024 раз(а) в 552 сообщении(ях)
|
Re: Пмогите разобраться
Вы упорно не хотите читать хелп к компилятору...
Цитата:
|
/* detect how many DS18B20 devices
are connected to the bus and
store their ROM codes in the rom_codes array */
devices=w1_search(0xf0,rom_codes);
обнаружьте сколько устройств DS18B20
связаны с шиной и
сохраните их коды ROM в массиве rom_codes
|
Это только ответ на 1 вопрос, все остальное в хелпе к компилятору, все рассписано подробно с кусками кода, не сочтите за грубость, но кроме вас никто туда не посмотрит за вас. Это похоже на игру в испорченный телефон...
|
|
|
|
17.12.2009, 00:37
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.11.2008
Адрес: г.Смоленск
Сообщений: 2,018
Сказал спасибо: 348
Сказали Спасибо 1,024 раз(а) в 552 сообщении(ях)
|
Re: Пмогите разобраться
Держите в помощь инфо на русском...Быстрее разберетесь
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 04:29.
|
|