, т. к. разделена на составляющие: конвертирование, а затем считывание температуры, что и хотел автор темы. Раскомментируйте и используйте в целом, если нужно.Amstron писал(а):На самом деле, в файле ds18b20_.lib нет функции ds18b20_temperature! Она закоментированна...
помогите переделать, библиотеку ds18b20 под мои требования.
- Сообщения: 326
- Зарегистрирован: Сб сен 06, 2008 12:56:13
- Реклама
- Сообщения: 173
- Зарегистрирован: Вт дек 21, 2010 21:18:52
Убрал я коментарии - появилась такая ошибка : L172: undefained symbol "ds18b20_temperature" . Вместо L184 стало L172....
Вот кусок программы определения температыры:
void Termometr(void)
{
float temp;
temp = ds18b20_temperature(0)*10;//команда для получения значения температуры
indication_IND=temp;
}
В самом начале программы у меня вот это написанно:
#include<mega8.h>
#asm
.equ __w1_port=0x18
.equ __w1_bit=0
#endasm
#include <ds18b20_.h>
#include <delay.h>
Помогите разобраться!
Вот кусок программы определения температыры:
void Termometr(void)
{
float temp;
temp = ds18b20_temperature(0)*10;//команда для получения значения температуры
indication_IND=temp;
}
В самом начале программы у меня вот это написанно:
#include<mega8.h>
#asm
.equ __w1_port=0x18
.equ __w1_bit=0
#endasm
#include <ds18b20_.h>
#include <delay.h>
Помогите разобраться!
- Сообщения: 173
- Зарегистрирован: Вт дек 21, 2010 21:18:52
Нашол я почему у меня функцию не видел! Надо было еще раскоментировать функцию в файле ds18b20_.h
Касяк остался! Если сделать чтобы программа уходила в прерывание при каждом переполнении 0 таймера (256), то ошибка постоянно висит. Если поставить пределитель на 8 , то ошибка выскакивает 50/50.
Если поставить 64 - пределитель, то всеравно иногда проскакивает, как и раньше!!!
Жду помощи....
Касяк остался! Если сделать чтобы программа уходила в прерывание при каждом переполнении 0 таймера (256), то ошибка постоянно висит. Если поставить пределитель на 8 , то ошибка выскакивает 50/50.
Если поставить 64 - пределитель, то всеравно иногда проскакивает, как и раньше!!!
Жду помощи....
- Сообщения: 326
- Зарегистрирован: Сб сен 06, 2008 12:56:13
Приложите код.Amstron писал(а):Жду помощи....
- Сообщения: 173
- Зарегистрирован: Вт дек 21, 2010 21:18:52
Я использую один датчик. Выше я уже выкладывал код.ValBag писал(а):Приложите код.Amstron писал(а):Жду помощи....
- Реклама
- Сообщения: 326
- Зарегистрирован: Сб сен 06, 2008 12:56:13
Так ошибка та-же? undefained symbol "ds18b20_temperature"?Amstron писал(а):Я использую один датчик. Выше я уже выкладывал код.
- Сообщения: 173
- Зарегистрирован: Вт дек 21, 2010 21:18:52
Эта ошибка выскакивала при закоментированной строчке этой функции.ValBag писал(а):Так ошибка та-же? undefained symbol "ds18b20_temperature"?Amstron писал(а):Я использую один датчик. Выше я уже выкладывал код.
Сейчас в устройстве иногда выскакивет левое число... В этом то и ошибка....
- Сообщения: 326
- Зарегистрирован: Сб сен 06, 2008 12:56:13
Ошибки в чтении, похоже. Используете паразитное питание или по трехпроводной линии? Попробуйте вот эту библиотеку (ниже). Результат выдается в intAmstron писал(а):Сейчас в устройстве иногда выскакивет левое число... В этом то и ошибка....
- Вложения
-
- ds18x20_v2.rar
- (1.47 КБ) 254 скачивания
- Сообщения: 173
- Зарегистрирован: Вт дек 21, 2010 21:18:52
Использую трехпроводную линию. Сейчас попробую...ValBag писал(а):Ошибки в чтении, похоже. Используете паразитное питание или по трехпроводной линии? Попробуйте вот эту библиотеку (ниже). Результат выдается в intAmstron писал(а):Сейчас в устройстве иногда выскакивет левое число... В этом то и ошибка....
- Сообщения: 173
- Зарегистрирован: Вт дек 21, 2010 21:18:52
Вылазиет ошибка в этих строчках. Ни не могу понять...Amstron писал(а): Использую трехпроводную линию. Сейчас попробую...
if( ds18b20_init( 0, 30, 60, DS18B20_11BIT_RES ) ) //инициализация датчика. Анализ присутствия датчика
{
indication_IND=555; //delay_ms( 1000 );
}
else { indication_IND=222;
};
undefained symbol 'ds18b20_init'
no matching if
- Сообщения: 326
- Зарегистрирован: Сб сен 06, 2008 12:56:13
Amstron
Вы раскоментировали калибровку? Тогда, вместо DS18B20_11BIT_RES, нужно в вызове поставить нужный параметр разрешающей способности.
Вобще-то в define это есть.
Вы раскоментировали калибровку? Тогда, вместо DS18B20_11BIT_RES, нужно в вызове поставить нужный параметр разрешающей способности.
Вобще-то в define это есть.
- Сообщения: 173
- Зарегистрирован: Вт дек 21, 2010 21:18:52
Поставил.ValBag писал(а):Amstron
Вы раскоментировали калибровку? Тогда, вместо DS18B20_11BIT_RES, нужно в вызове поставить нужный параметр разрешающей способности.
Вобще-то в define это есть.
if( ds18b20_init(0, 30, 60, 2 ) ) //инициализация датчика. Анализ присутствия датчика
Всеравно видит ошибку... что нет функции ds18b20_init
- Сообщения: 326
- Зарегистрирован: Сб сен 06, 2008 12:56:13
Если по библиотеке, которую приложил, то уберите в обеих файлах знаки комментариев в этой функции.Amstron писал(а):Все равно видит ошибку... что нет функции ds18b20_init
- Сообщения: 173
- Зарегистрирован: Вт дек 21, 2010 21:18:52
Убрал. Заработало. Но ошибку всеравно выдает! Правда на выходе другая температура вместо 30 выдает 50 градусов. А вот если вытащить датчик то выдает ошибку. Точно такуюже ошибку выдает если прерывание поставить чаще!!!ValBag писал(а):Если по библиотеке, которую приложил, то уберите в обеих файлах знаки комментариев в этой функции.Amstron писал(а):Все равно видит ошибку... что нет функции ds18b20_init
Жду помощи(((
- Сообщения: 326
- Зарегистрирован: Сб сен 06, 2008 12:56:13
Есть еще один момент.Amstron писал(а):Убрал. Заработало. Но ошибку всеравно выдает! Правда на выходе другая температура вместо 30 выдает 50 градусов. А вот если вытащить датчик то выдает ошибку. Точно такуюже ошибку выдает если прерывание поставить чаще!!!
Т. к. результат приведен к int, то младшие 4 разряда, отображающие дробную часть, вам надо обрабатывать отдельно.
В остальном, у вас какие-то неувязки с прерыванием. Вы же весь код не хотите привести.
- Сообщения: 28
- Зарегистрирован: Вс май 11, 2008 19:12:34
O-LED писал(а):Значит по порядку.
Пишу в CVAVR. Использую термометр DS18B20. библиотеку работы с ней беру стандартную из CVAVR. Алгоритм работы у неё, как вы наверное знаете, следующий -
команда на измерение температуры - пауза(длительность зависит от точности измерения, до 750мкс) - чтение температуры.
Так вот, если просто делать какой термометр, то такой алгоритм вполне подходит. а вот если делать устройство посложней, которое постоянно чтото обрабатывает, и должно откликаться в режиме реального времени, то в момент паузы мы получаем "затык" в работе длинной 750мкс. Это очень сильно портит впечатление от работы устройства.
Что хотелось бы.
Хотелось бы иметь такую библиотеку, чтоб я сам мог дать команду на измерение, например ds18b20_convert(), потом сам, любым удобным мне способом, отсчитал нужную паузу(а в это время моя программа крутится в обычном режиме, без всяких "туплений"), а потом прочитал уже готовый результат например ds18b20_readTemp()
Полазив по инету, подходящей мне библиотеки не нашел. кругом примеры и обучалки на базе встроенной в CVAVR библиотеки.
Помогите найти, или изменить имеющуюся под мои требования. желательно чтоб она поддерживала несколько датчиков, (хотя это наверное не трудно добавить).
Спасибо.
очень хреново ищите, ибо на этом самом форуме не один раз были и ссылки. и исходники, и объяснения, как все это сделать. в конце концов можете скачать с моего сайта проект термостата и оттуда извлечь требуемое.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Если Вы хотя бы немного почитали о работе датчика, а не тыкали всё подряд в свою прогу, то поняли что прерывания просто напросто "портят" временные интерывалы в тайм-слотах. Нужно запрещать прерывание на время тайм-слота (точнее на основную его часть) и обязательно повторный опрос при "корявом" CRC. Об этом не раз уже на форуме говорилось. Библиотека 1-wire пишется очень просто, ничего там сверхестественного нет. Надо просто почитать немного литературу и понять как это всё работает.Точно такуюже ошибку выдает если прерывание поставить чаще!!!


