DS18B20 глючит, или руки кривые

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Payalnick
Открыл глаза
Сообщения: 58
Зарегистрирован: Сб янв 07, 2012 11:41:25

Re: DS18B20 глючит, или руки кривые

Сообщение Payalnick »

md5sum писал(а):
Payalnick писал(а):А если создать переменную типа double или float, в нее записать значение температуры и вывести? Будут ли выводиться десятые?

Должны...
sprintf(t,"t=%.1f\xdfC",temp);

Испробуем)
Помогите нупу в написании программ)
Реклама
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: DS18B20 глючит, или руки кривые

Сообщение md5sum »

Payalnick писал(а):Может когда датчик набирает отрицательную температуру, он отключается?

Мне интересно, когда высказываются (или просто в голове рождаются) такие предположения, неужто не смущает знание того, что в других конструкциях данные датчики превосходно работают и соответствуют заявленным параметрам?
— Не говорите мне что делать и я не скажу куда Вам идти...
Реклама
Payalnick
Открыл глаза
Сообщения: 58
Зарегистрирован: Сб янв 07, 2012 11:41:25

Re: DS18B20 глючит, или руки кривые

Сообщение Payalnick »

md5sum писал(а):
Payalnick писал(а):Может когда датчик набирает отрицательную температуру, он отключается?

Мне интересно, когда высказываются (или просто в голове рождаются) такие предположения, неужто не смущает знание того, что в других конструкциях данные датчики превосходно работают и соответствуют заявленным параметрам?

Сомнения есть, может и мега битая, так как ей уже больше года и много чего она повидала. В общем буду еще тестить.

:kill:
Помогите нупу в написании программ)
engee
Родился
Сообщения: 12
Зарегистрирован: Пт окт 14, 2011 22:39:40

Re: DS18B20 глючит, или руки кривые

Сообщение engee »

http://www.masterkit.ru/zip/ds18b20-rus.pdf

Там есть таблица "TEMPERATURE/DATA RELATIONSHIP", положительные температуры датчик представляет, как бы считая от нуля вверх, а отрицательные от 4096 вниз.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Panda_Y2K
Грызет канифоль
Сообщения: 258
Зарегистрирован: Пт сен 23, 2011 06:44:41
Откуда: ЮФО
Контактная информация:

Re: DS18B20 глючит, или руки кривые

Сообщение 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
Купи два беляша и собери из них кошку
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
Реклама
Payalnick
Открыл глаза
Сообщения: 58
Зарегистрирован: Сб янв 07, 2012 11:41:25

Re: DS18B20 глючит, или руки кривые

Сообщение 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

А как это исправить?
Помогите нупу в написании программ)
Реклама
Payalnick
Открыл глаза
Сообщения: 58
Зарегистрирован: Сб янв 07, 2012 11:41:25

Re: DS18B20 глючит, или руки кривые

Сообщение Payalnick »

Кстати, взял код своего друга, прошил им МК и когда набирается ниже -7, выводит всякую ересь.
Помогите нупу в написании программ)
Payalnick
Открыл глаза
Сообщения: 58
Зарегистрирован: Сб янв 07, 2012 11:41:25

Re: DS18B20 глючит, или руки кривые

Сообщение Payalnick »

Panda_Y2K писал(а):
if (temp>65480) {temp=(65535-temp)+1;}


То есть если не удалось обратиться к устройству по ром адресу выдается -9999

А по какой причине не может МК обратиться к датчику по ром?
Как заставить работать датчик или МК? Может молотком, жестко - по русски?))
Помогите нупу в написании программ)
Аватара пользователя
Panda_Y2K
Грызет канифоль
Сообщения: 258
Зарегистрирован: Пт сен 23, 2011 06:44:41
Откуда: ЮФО
Контактная информация:

Re: DS18B20 глючит, или руки кривые

Сообщение 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);


Еще может быть косяк если не правильно порт или бит порта указали для датчика.
Купи два беляша и собери из них кошку
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
Payalnick
Открыл глаза
Сообщения: 58
Зарегистрирован: Сб янв 07, 2012 11:41:25

Re: DS18B20 глючит, или руки кривые

Сообщение 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);


Еще может быть косяк если не правильно порт или бит порта указали для датчика.

Еслиб неправильно бит указал, тогдаб положительную температуру не читал бы.
Помогите нупу в написании программ)
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: DS18B20 глючит, или руки кривые

Сообщение md5sum »

А в холодильник только датчик запихиваем или МК то-же?
Такое поведения указывает на проблемы с реализацией 1-wire (длительности импульсов/пауз на гране фола) при положительных температурах датчик еще терпит и понимает, что от него хотят, а при низких уже нет.
Если мк то-же в холод попадает, то вероятно уход тактовой слишком велик.
— Не говорите мне что делать и я не скажу куда Вам идти...
Payalnick
Открыл глаза
Сообщения: 58
Зарегистрирован: Сб янв 07, 2012 11:41:25

Re: DS18B20 глючит, или руки кривые

Сообщение Payalnick »

md5sum писал(а):А в холодильник только датчик запихиваем или МК то-же?
Такое поведения указывает на проблемы с реализацией 1-wire (длительности импульсов/пауз на гране фола) при положительных температурах датчик еще терпит и понимает, что от него хотят, а при низких уже нет.
Если мк то-же в холод попадает, то вероятно уход тактовой слишком велик.

Не, я только датчик в морозилку сую и все. А какой должна быть тактовая чистота стабильной работы?
Помогите нупу в написании программ)
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: DS18B20 глючит, или руки кривые

Сообщение md5sum »

Payalnick писал(а):А какой должна быть тактовая чистота стабильной работы?

А это должно быть указано в описании к библиотеке. CVAVR не держу, потому не подскажу.
Все зависит от реализации 1-wire.
Параметры 1-wire где только не описаны...
— Не говорите мне что делать и я не скажу куда Вам идти...
Payalnick
Открыл глаза
Сообщения: 58
Зарегистрирован: Сб янв 07, 2012 11:41:25

Re: DS18B20 глючит, или руки кривые

Сообщение Payalnick »

Ясно, буду читать.

А если я использую внутренний генератор, это ничего?
Помогите нупу в написании программ)
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: DS18B20 глючит, или руки кривые

Сообщение md5sum »

Ничего хорошего...
Внутренний генератор "гуляет" на ~250КГц при изменении питания на 0.5В, примерно так-же от температуры...
От кристала к кристалу - ХЗ, нет статитстики...
— Не говорите мне что делать и я не скажу куда Вам идти...
Payalnick
Открыл глаза
Сообщения: 58
Зарегистрирован: Сб янв 07, 2012 11:41:25

Re: DS18B20 глючит, или руки кривые

Сообщение Payalnick »

md5sum писал(а):Ничего хорошего...
Внутренний генератор "гуляет" на ~250КГц при изменении питания на 0.5В, примерно так-же от температуры...
От кристала к кристалу - ХЗ, нет статитстики...

Пойду в магаз, куплю кварц на 12, а какие кондеры к нему? 18 пик?
Помогите нупу в написании программ)
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: DS18B20 глючит, или руки кривые

Сообщение md5sum »

Payalnick писал(а):
md5sum писал(а):Ничего хорошего...
Внутренний генератор "гуляет" на ~250КГц при изменении питания на 0.5В, примерно так-же от температуры...
От кристала к кристалу - ХЗ, нет статитстики...

Пойду в магаз, куплю кварц на 12, а какие кондеры к нему? 18 пик?

12 - 22 пик..... 18 в самый раз :))
Следующая тема будет "Фьюзы - как правильно" :tea: :))
— Не говорите мне что делать и я не скажу куда Вам идти...
Payalnick
Открыл глаза
Сообщения: 58
Зарегистрирован: Сб янв 07, 2012 11:41:25

Re: DS18B20 глючит, или руки кривые

Сообщение Payalnick »

md5sum писал(а):
Payalnick писал(а):
md5sum писал(а):Ничего хорошего...
Внутренний генератор "гуляет" на ~250КГц при изменении питания на 0.5В, примерно так-же от температуры...
От кристала к кристалу - ХЗ, нет статитстики...

Пойду в магаз, куплю кварц на 12, а какие кондеры к нему? 18 пик?

12 - 22 пик..... 18 в самый раз :))
Следующая тема будет "Фьюзы - как правильно" :tea: :))

Да про предел кондеров я еще помню, а вот блокнотик с фьюзами я посеял)) Пойду почитаю темку.
Помогите нупу в написании программ)
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Re: DS18B20 глючит, или руки кривые

Сообщение BCluster »

md5sum писал(а):Внутренний генератор "гуляет" на ~250КГц при изменении питания на 0.5В, примерно так-же от температуры...

Фигась, это где то в документах есть?

Насчет темы - тактовая с которой работает МК и та что указана в свойствах проекта в CVAVR совпадают?)
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: DS18B20 глючит, или руки кривые

Сообщение md5sum »

BCluster писал(а):Фигась, это где то в документах есть?

Я же сказал: примерно (~) :))
ДШ пункт 26.10 Internal Oscillator Speed.
Линейку к графикам не прикладывал :))
— Не говорите мне что делать и я не скажу куда Вам идти...
Закрыто

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