Испробуем)md5sum писал(а):Должны...Payalnick писал(а):А если создать переменную типа double или float, в нее записать значение температуры и вывести? Будут ли выводиться десятые?
sprintf(t,"t=%.1f\xdfC",temp);
DS18B20 глючит, или руки кривые
- Сообщения: 58
- Зарегистрирован: Сб янв 07, 2012 11:41:25
Помогите нупу в написании программ)
- Реклама
Мне интересно, когда высказываются (или просто в голове рождаются) такие предположения, неужто не смущает знание того, что в других конструкциях данные датчики превосходно работают и соответствуют заявленным параметрам?Payalnick писал(а):Может когда датчик набирает отрицательную температуру, он отключается?
— Не говорите мне что делать и я не скажу куда Вам идти...
- Сообщения: 58
- Зарегистрирован: Сб янв 07, 2012 11:41:25
Сомнения есть, может и мега битая, так как ей уже больше года и много чего она повидала. В общем буду еще тестить.md5sum писал(а):Мне интересно, когда высказываются (или просто в голове рождаются) такие предположения, неужто не смущает знание того, что в других конструкциях данные датчики превосходно работают и соответствуют заявленным параметрам?Payalnick писал(а):Может когда датчик набирает отрицательную температуру, он отключается?
Помогите нупу в написании программ)
- Сообщения: 12
- Зарегистрирован: Пт окт 14, 2011 22:39:40
http://www.masterkit.ru/zip/ds18b20-rus.pdf
Там есть таблица "TEMPERATURE/DATA RELATIONSHIP", положительные температуры датчик представляет, как бы считая от нуля вверх, а отрицательные от 4096 вниз.
Там есть таблица "TEMPERATURE/DATA RELATIONSHIP", положительные температуры датчик представляет, как бы считая от нуля вверх, а отрицательные от 4096 вниз.
Этот код ваш товарищ писал и у него работало по тому, что датчик при опросе отрицательную температуру выдает в дополнительном коде.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;
}Купи два беляша и собери из них кошку
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
- Реклама
- Сообщения: 58
- Зарегистрирован: Сб янв 07, 2012 11:41:25
А как это исправить?Panda_Y2K писал(а):Этот код ваш товарищ писал и у него работало по тому, что датчик при опросе отрицательную температуру выдает в дополнительном коде.if (temp>65480) {temp=(65535-temp)+1;}
Хотя это он делал не совсем корректно, но для данного случая допустимо. В дополнительном коде у отрицательного числа старший бит установлен в 1 и проверять надо его.
Вот что делает CodeVisionТо есть если не удалось обратиться к устройству по ром адресу выдается -9999Код: Выделить всё
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; }
Помогите нупу в написании программ)
- Сообщения: 58
- Зарегистрирован: Сб янв 07, 2012 11:41:25
Кстати, взял код своего друга, прошил им МК и когда набирается ниже -7, выводит всякую ересь.
Помогите нупу в написании программ)
- Сообщения: 58
- Зарегистрирован: Сб янв 07, 2012 11:41:25
А по какой причине не может МК обратиться к датчику по ром?Panda_Y2K писал(а):То есть если не удалось обратиться к устройству по ром адресу выдается -9999if (temp>65480) {temp=(65535-temp)+1;}
Как заставить работать датчик или МК? Может молотком, жестко - по русски?))
Помогите нупу в написании программ)
Я делал это вот так
По ROM адресу не может найти если устройство в системе одно и инициализации для ром не проводилось на пример, тогда для CVAVR нужно писать так:
Еще может быть косяк если не правильно порт или бит порта указали для датчика.
Код: Выделить всё
if (temperature&0x8000) //less zero
{T[0]=21; //Это вам не нужно, это для моего термометра было надо.
temperature=~temperature+1; //addition code
};Код: Выделить всё
ds18b20_init(0,20,60,DS18B20_12BIT_RES);
temperature = ds18b20_temperature(0);Купи два беляша и собери из них кошку
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
- Сообщения: 58
- Зарегистрирован: Сб янв 07, 2012 11:41:25
Еслиб неправильно бит указал, тогдаб положительную температуру не читал бы.Panda_Y2K писал(а):Я делал это вот такПо ROM адресу не может найти если устройство в системе одно и инициализации для ром не проводилось на пример, тогда для CVAVR нужно писать так:Код: Выделить всё
if (temperature&0x8000) //less zero {T[0]=21; //Это вам не нужно, это для моего термометра было надо. temperature=~temperature+1; //addition code };Еще может быть косяк если не правильно порт или бит порта указали для датчика.Код: Выделить всё
ds18b20_init(0,20,60,DS18B20_12BIT_RES); temperature = ds18b20_temperature(0);
Помогите нупу в написании программ)
А в холодильник только датчик запихиваем или МК то-же?
Такое поведения указывает на проблемы с реализацией 1-wire (длительности импульсов/пауз на гране фола) при положительных температурах датчик еще терпит и понимает, что от него хотят, а при низких уже нет.
Если мк то-же в холод попадает, то вероятно уход тактовой слишком велик.
Такое поведения указывает на проблемы с реализацией 1-wire (длительности импульсов/пауз на гране фола) при положительных температурах датчик еще терпит и понимает, что от него хотят, а при низких уже нет.
Если мк то-же в холод попадает, то вероятно уход тактовой слишком велик.
— Не говорите мне что делать и я не скажу куда Вам идти...
- Сообщения: 58
- Зарегистрирован: Сб янв 07, 2012 11:41:25
Не, я только датчик в морозилку сую и все. А какой должна быть тактовая чистота стабильной работы?md5sum писал(а):А в холодильник только датчик запихиваем или МК то-же?
Такое поведения указывает на проблемы с реализацией 1-wire (длительности импульсов/пауз на гране фола) при положительных температурах датчик еще терпит и понимает, что от него хотят, а при низких уже нет.
Если мк то-же в холод попадает, то вероятно уход тактовой слишком велик.
Помогите нупу в написании программ)
А это должно быть указано в описании к библиотеке. CVAVR не держу, потому не подскажу.Payalnick писал(а):А какой должна быть тактовая чистота стабильной работы?
Все зависит от реализации 1-wire.
Параметры 1-wire где только не описаны...
— Не говорите мне что делать и я не скажу куда Вам идти...
- Сообщения: 58
- Зарегистрирован: Сб янв 07, 2012 11:41:25
Ясно, буду читать.
А если я использую внутренний генератор, это ничего?
А если я использую внутренний генератор, это ничего?
Помогите нупу в написании программ)
Ничего хорошего...
Внутренний генератор "гуляет" на ~250КГц при изменении питания на 0.5В, примерно так-же от температуры...
От кристала к кристалу - ХЗ, нет статитстики...
Внутренний генератор "гуляет" на ~250КГц при изменении питания на 0.5В, примерно так-же от температуры...
От кристала к кристалу - ХЗ, нет статитстики...
— Не говорите мне что делать и я не скажу куда Вам идти...
- Сообщения: 58
- Зарегистрирован: Сб янв 07, 2012 11:41:25
Пойду в магаз, куплю кварц на 12, а какие кондеры к нему? 18 пик?md5sum писал(а):Ничего хорошего...
Внутренний генератор "гуляет" на ~250КГц при изменении питания на 0.5В, примерно так-же от температуры...
От кристала к кристалу - ХЗ, нет статитстики...
Помогите нупу в написании программ)
12 - 22 пик..... 18 в самый разPayalnick писал(а):Пойду в магаз, куплю кварц на 12, а какие кондеры к нему? 18 пик?md5sum писал(а):Ничего хорошего...
Внутренний генератор "гуляет" на ~250КГц при изменении питания на 0.5В, примерно так-же от температуры...
От кристала к кристалу - ХЗ, нет статитстики...
Следующая тема будет "Фьюзы - как правильно"
— Не говорите мне что делать и я не скажу куда Вам идти...
- Сообщения: 58
- Зарегистрирован: Сб янв 07, 2012 11:41:25
Да про предел кондеров я еще помню, а вот блокнотик с фьюзами я посеял)) Пойду почитаю темку.md5sum писал(а):12 - 22 пик..... 18 в самый разPayalnick писал(а): Пойду в магаз, куплю кварц на 12, а какие кондеры к нему? 18 пик?
Следующая тема будет "Фьюзы - как правильно"![]()
Помогите нупу в написании программ)
Фигась, это где то в документах есть?md5sum писал(а):Внутренний генератор "гуляет" на ~250КГц при изменении питания на 0.5В, примерно так-же от температуры...
Насчет темы - тактовая с которой работает МК и та что указана в свойствах проекта в CVAVR совпадают?)
Я же сказал: примерно (~)BCluster писал(а):Фигась, это где то в документах есть?
ДШ пункт 26.10 Internal Oscillator Speed.
Линейку к графикам не прикладывал
— Не говорите мне что делать и я не скажу куда Вам идти...


