Страница 2 из 4
Re: DS18B20 глючит, или руки кривые
Добавлено: Сб янв 07, 2012 16:34:20
Payalnick
md5sum писал(а):Payalnick писал(а):А если создать переменную типа double или float, в нее записать значение температуры и вывести? Будут ли выводиться десятые?
Должны...
sprintf(t,"t=%.1f\xdfC",temp);
Испробуем)
Re: DS18B20 глючит, или руки кривые
Добавлено: Сб янв 07, 2012 16:40:16
md5sum
Payalnick писал(а):Может когда датчик набирает отрицательную температуру, он отключается?
Мне интересно, когда высказываются (или просто в голове рождаются) такие предположения, неужто не смущает знание того, что в других конструкциях данные датчики превосходно работают и соответствуют заявленным параметрам?
Re: DS18B20 глючит, или руки кривые
Добавлено: Сб янв 07, 2012 16:43:33
Payalnick
md5sum писал(а):Payalnick писал(а):Может когда датчик набирает отрицательную температуру, он отключается?
Мне интересно, когда высказываются (или просто в голове рождаются) такие предположения, неужто не смущает знание того, что в других конструкциях данные датчики превосходно работают и соответствуют заявленным параметрам?
Сомнения есть, может и мега битая, так как ей уже больше года и много чего она повидала. В общем буду еще тестить.

Re: DS18B20 глючит, или руки кривые
Добавлено: Вс янв 08, 2012 21:03:15
engee
http://www.masterkit.ru/zip/ds18b20-rus.pdf
Там есть таблица "TEMPERATURE/DATA RELATIONSHIP", положительные температуры датчик представляет, как бы считая от нуля вверх, а отрицательные от 4096 вниз.
Re: DS18B20 глючит, или руки кривые
Добавлено: Вс янв 08, 2012 21:30:57
Panda_Y2K
if (temp>65480) {temp=(65535-temp)+1;}
Этот код ваш товарищ писал и у него работало по тому, что датчик при опросе отрицательную температуру выдает в дополнительном коде.
Хотя это он делал не совсем корректно, но для данного случая допустимо. В дополнительном коде у отрицательного числа старший бит установлен в 1 и проверять надо его.
Вот что делает CodeVision
Код: Выделить всё
float ds18b20_temperature(unsigned char *addr)
{
unsigned char resolution;
if (ds18b20_read_spd(addr)==0) return -9999;
resolution=(__ds18b20_scratch_pad.conf_register>>5) & 3;
if (ds18b20_select(addr)==0) return -9999;
w1_write(0x44);
delay_ms(conv_delay[resolution]);
if (ds18b20_read_spd(addr)==0) return -9999;
w1_init();
return (*((int *) &__ds18b20_scratch_pad.temp_lsb) & bit_mask[resolution])*0.0625;
}
То есть если не удалось обратиться к устройству по ром адресу выдается -9999
Re: DS18B20 глючит, или руки кривые
Добавлено: Вс янв 08, 2012 21:33:23
Payalnick
Panda_Y2K писал(а):if (temp>65480) {temp=(65535-temp)+1;}
Этот код ваш товарищ писал и у него работало по тому, что датчик при опросе отрицательную температуру выдает в дополнительном коде.
Хотя это он делал не совсем корректно, но для данного случая допустимо. В дополнительном коде у отрицательного числа старший бит установлен в 1 и проверять надо его.
Вот что делает CodeVision
Код: Выделить всё
float ds18b20_temperature(unsigned char *addr)
{
unsigned char resolution;
if (ds18b20_read_spd(addr)==0) return -9999;
resolution=(__ds18b20_scratch_pad.conf_register>>5) & 3;
if (ds18b20_select(addr)==0) return -9999;
w1_write(0x44);
delay_ms(conv_delay[resolution]);
if (ds18b20_read_spd(addr)==0) return -9999;
w1_init();
return (*((int *) &__ds18b20_scratch_pad.temp_lsb) & bit_mask[resolution])*0.0625;
}
То есть если не удалось обратиться к устройству по ром адресу выдается -9999
А как это исправить?
Re: DS18B20 глючит, или руки кривые
Добавлено: Вс янв 08, 2012 21:36:05
Payalnick
Кстати, взял код своего друга, прошил им МК и когда набирается ниже -7, выводит всякую ересь.
Re: DS18B20 глючит, или руки кривые
Добавлено: Вс янв 08, 2012 23:58:21
Payalnick
Panda_Y2K писал(а):if (temp>65480) {temp=(65535-temp)+1;}
То есть если не удалось обратиться к устройству по ром адресу выдается -9999
А по какой причине не может МК обратиться к датчику по ром?
Как заставить работать датчик или МК? Может молотком, жестко - по русски?))
Re: DS18B20 глючит, или руки кривые
Добавлено: Пн янв 09, 2012 05:58:03
Panda_Y2K
Я делал это вот так
Код: Выделить всё
if (temperature&0x8000) //less zero
{T[0]=21; //Это вам не нужно, это для моего термометра было надо.
temperature=~temperature+1; //addition code
};
По ROM адресу не может найти если устройство в системе одно и инициализации для ром не проводилось на пример, тогда для CVAVR нужно писать так:
Код: Выделить всё
ds18b20_init(0,20,60,DS18B20_12BIT_RES);
temperature = ds18b20_temperature(0);
Еще может быть косяк если не правильно порт или бит порта указали для датчика.
Re: DS18B20 глючит, или руки кривые
Добавлено: Пн янв 09, 2012 11:32:08
Payalnick
Panda_Y2K писал(а):Я делал это вот так
Код: Выделить всё
if (temperature&0x8000) //less zero
{T[0]=21; //Это вам не нужно, это для моего термометра было надо.
temperature=~temperature+1; //addition code
};
По ROM адресу не может найти если устройство в системе одно и инициализации для ром не проводилось на пример, тогда для CVAVR нужно писать так:
Код: Выделить всё
ds18b20_init(0,20,60,DS18B20_12BIT_RES);
temperature = ds18b20_temperature(0);
Еще может быть косяк если не правильно порт или бит порта указали для датчика.
Еслиб неправильно бит указал, тогдаб положительную температуру не читал бы.
Re: DS18B20 глючит, или руки кривые
Добавлено: Пн янв 09, 2012 11:39:49
md5sum
А в холодильник только датчик запихиваем или МК то-же?
Такое поведения указывает на проблемы с реализацией 1-wire (длительности импульсов/пауз на гране фола) при положительных температурах датчик еще терпит и понимает, что от него хотят, а при низких уже нет.
Если мк то-же в холод попадает, то вероятно уход тактовой слишком велик.
Re: DS18B20 глючит, или руки кривые
Добавлено: Пн янв 09, 2012 11:47:42
Payalnick
md5sum писал(а):А в холодильник только датчик запихиваем или МК то-же?
Такое поведения указывает на проблемы с реализацией 1-wire (длительности импульсов/пауз на гране фола) при положительных температурах датчик еще терпит и понимает, что от него хотят, а при низких уже нет.
Если мк то-же в холод попадает, то вероятно уход тактовой слишком велик.
Не, я только датчик в морозилку сую и все. А какой должна быть тактовая чистота стабильной работы?
Re: DS18B20 глючит, или руки кривые
Добавлено: Пн янв 09, 2012 11:52:56
md5sum
Payalnick писал(а):А какой должна быть тактовая чистота стабильной работы?
А это должно быть указано в описании к библиотеке. CVAVR не держу, потому не подскажу.
Все зависит от реализации 1-wire.
Параметры 1-wire где только не описаны...
Re: DS18B20 глючит, или руки кривые
Добавлено: Пн янв 09, 2012 11:57:42
Payalnick
Ясно, буду читать.
А если я использую внутренний генератор, это ничего?
Re: DS18B20 глючит, или руки кривые
Добавлено: Пн янв 09, 2012 12:06:08
md5sum
Ничего хорошего...
Внутренний генератор "гуляет" на ~250КГц при изменении питания на 0.5В, примерно так-же от температуры...
От кристала к кристалу - ХЗ, нет статитстики...
Re: DS18B20 глючит, или руки кривые
Добавлено: Пн янв 09, 2012 12:08:52
Payalnick
md5sum писал(а):Ничего хорошего...
Внутренний генератор "гуляет" на ~250КГц при изменении питания на 0.5В, примерно так-же от температуры...
От кристала к кристалу - ХЗ, нет статитстики...
Пойду в магаз, куплю кварц на 12, а какие кондеры к нему? 18 пик?
Re: DS18B20 глючит, или руки кривые
Добавлено: Пн янв 09, 2012 12:11:30
md5sum
Payalnick писал(а):md5sum писал(а):Ничего хорошего...
Внутренний генератор "гуляет" на ~250КГц при изменении питания на 0.5В, примерно так-же от температуры...
От кристала к кристалу - ХЗ, нет статитстики...
Пойду в магаз, куплю кварц на 12, а какие кондеры к нему? 18 пик?
12 - 22 пик..... 18 в самый раз

Следующая тема будет "Фьюзы - как правильно"

Re: DS18B20 глючит, или руки кривые
Добавлено: Пн янв 09, 2012 12:20:59
Payalnick
md5sum писал(а):Payalnick писал(а):
Пойду в магаз, куплю кварц на 12, а какие кондеры к нему? 18 пик?
12 - 22 пик..... 18 в самый раз

Следующая тема будет "Фьюзы - как правильно"

Да про предел кондеров я еще помню, а вот блокнотик с фьюзами я посеял)) Пойду почитаю темку.
Re: DS18B20 глючит, или руки кривые
Добавлено: Пн янв 09, 2012 13:41:38
BCluster
md5sum писал(а):Внутренний генератор "гуляет" на ~250КГц при изменении питания на 0.5В, примерно так-же от температуры...
Фигась, это где то в документах есть?
Насчет темы - тактовая с которой работает МК и та что указана в свойствах проекта в CVAVR совпадают?)
Re: DS18B20 глючит, или руки кривые
Добавлено: Пн янв 09, 2012 13:58:42
md5sum
BCluster писал(а):Фигась, это где то в документах есть?
Я же сказал: примерно (~)

ДШ пункт 26.10 Internal Oscillator Speed.
Линейку к графикам не прикладывал
