Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
16.01.2014, 22:59
|
|
Прописка
Регистрация: 29.06.2007
Сообщений: 217
Сказал спасибо: 143
Сказали Спасибо 13 раз(а) в 11 сообщении(ях)
|
Re: ds18b20 отрицательная температура
Если бы Протеус глючил с ds18b20,уже бы заметили многие.А так глючу я.
|
|
|
|
16.01.2014, 23:42
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,982
Сказал спасибо: 2,554
Сказали Спасибо 11,862 раз(а) в 5,944 сообщении(ях)
|
Re: ds18b20 отрицательная температура
Прокатите через свой софт табличные значения температуры из ДШ (а можно и своих добавить) вместо чтения с датчика. При этом убедитесь в безглючности (или наоборот) своих преобразований.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
17.01.2014, 00:57
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: ds18b20 отрицательная температура
Сообщение от akegor
|
О да... Протез - это сурово!
|
Есть основания не верить?
Ну так проверьте.
...вместо минуса "F"
Последний раз редактировалось omercury; 17.01.2014 в 00:59.
Причина: не та картинка. :-)
|
|
|
|
17.01.2014, 01:23
|
|
Прописка
Регистрация: 29.06.2007
Сообщений: 217
Сказал спасибо: 143
Сказали Спасибо 13 раз(а) в 11 сообщении(ях)
|
Re: ds18b20 отрицательная температура
Сообщение от akegor
|
Прокатите через свой софт табличные значения температуры из ДШ (а можно и своих добавить) вместо чтения с датчика. При этом убедитесь в безглючности (или наоборот) своих преобразований.
|
К сожалению я не настолько грамотный(((.Быстрее будет спаять).
|
|
|
|
17.01.2014, 01:31
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,982
Сказал спасибо: 2,554
Сказали Спасибо 11,862 раз(а) в 5,944 сообщении(ях)
|
Re: ds18b20 отрицательная температура
Просто выбрать из массива вместо вызова функции чтения температуры.
Конечно, программа немного изменится, но вернуть в обратный зад всегда можно.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
17.01.2014, 01:37
|
|
Частый гость
Регистрация: 15.01.2014
Сообщений: 20
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: ds18b20 отрицательная температура
А proteus покажет как борщ варить?Лучше собери реальную схему-быстрей запомнится
|
|
|
|
17.01.2014, 02:15
|
|
Прописка
Регистрация: 29.06.2007
Сообщений: 217
Сказал спасибо: 143
Сказали Спасибо 13 раз(а) в 11 сообщении(ях)
|
Re: ds18b20 отрицательная температура
Сообщение от akegor
|
Просто выбрать из массива вместо вызова функции чтения температуры.
Конечно, программа немного изменится, но вернуть в обратный зад всегда можно.
|
Я чот даже не думал в этом направлении.Проверил 4 отриц. значения из таблицы ДШ.Подставил их в массив вместо функции чтения из датчиков.
Все 4 корректно отобразились.Неушто Протеус глючит?Ну так ведь не читал
ни разу что-б кто то жаловался на модель ds18b20.Я частенько тут темы шуршу.
|
|
|
|
17.01.2014, 02:24
|
|
Заблокирован
Регистрация: 25.04.2013
Сообщений: 1,431
Сказал спасибо: 0
Сказали Спасибо 385 раз(а) в 254 сообщении(ях)
|
Re: ds18b20 отрицательная температура
|
|
|
|
17.01.2014, 12:03
|
|
Частый гость
Регистрация: 27.08.2008
Адрес: Москва
Сообщений: 29
Сказал спасибо: 6
Сказали Спасибо 1 раз в 1 сообщении
|
Re: ds18b20 отрицательная температура
Сообщение от YURALL72
|
Попробовал и так,то-же самое.Похоже ошибка не в обработке отрицат. значений. Но где она может быть если с полож. всё в порядке???Мистика блин.
|
Что-то мне подсказывает, что нельзя просто взять и изменить знак (© ![Прикольно](images/smilies/icon_wink3.gif) ). Патченный мной "стандартный" код на базе гуляющего по сети ds18x20.c выглядит так:
PHP код:
|
void DS18x20_ConvertToThemperature(uint8_t* data, uint8_t* themp)
{
//Store temperature integer digits and decimal digits
//AV: NB! result temperature stored as positive number with character sign in themp[0]
themp[1] = data[0]››4;
themp[1] |= (data[1]&0x07)‹‹4;
//Store decimal digits
themp[2] = (data[0] & 0x0f);
//AV: was *= 5, actual: *= 6.25
//themp[2] *= 6;
if (data[1]›0xFB){
themp[1] = 127-themp[1];
themp[0] = '-';
if (themp[2]) themp[2] = 16 - themp[2];
else themp[1]++;
}
else if((data[0]==0x00)&&(data[1]==0x00)) themp[0] = ' '; else themp[0] = '+';
themp[2] = (themp[2] * 10) ›› 4; // AV: round to 0.1: 0.51 -› 5
}
|
В своем логгере использую упрощенный вариант, окрулляющий дробную часть до десятых (т.е. 0.1 превращается в 0 целой части и 1 (не 10) дробной):
PHP код:
|
DS18x20Value DS18x20_ConvertToTemp(uint8_t* data) {
DS18x20Value r;
r.dec = (data[0] ›› 4) | ((data[1] & 0x07) ‹‹ 4);
r.frac = (data[0] & 0x0F);
if (data[1] › 0xFB) {
r.dec = -(127 - r.dec);
if (r.frac) r.frac = 16 - r.frac;
else r.dec--;
}
r.frac = (r.frac * 10) ›› 4; // NB: 0.5 -› 5, 0.12 -› 1
return r;
}
|
Последний раз редактировалось av0000; 17.01.2014 в 14:59.
Причина: Скопировал древнюю версию кода. Теперь - актуальный из git-a
|
|
|
|
17.01.2014, 16:27
|
|
Заблокирован
Регистрация: 23.09.2007
Сообщений: 761
Сказал спасибо: 84
Сказали Спасибо 352 раз(а) в 151 сообщении(ях)
|
Re: ds18b20 отрицательная температура
Чо-то ТС намудрил.
Для CVAVR обычно пишут так:
temp=ds18b20_temperature(&rom_code[i][0]); //читаем температуру с выбранного датчика
if (temp›1000){ //если датчик выдаёт больше 1000
temp=4096-temp; //отнимаем от данных 4096
temp=-temp; //и ставим знак "минус"
}
sprintf(lcd_buffer,"t=%i.%u\xdfC",temp,temp%1); //записуемв масив для экрана температуру и всё такое
lcd_clear(); //чистим дисплей перед выводом
lcd_puts(lcd_buffer); //выводим масив на LCD
ссылка
посмотрел свой код
if (tt›4040) {tt=tt-4095;}; // почему не помню, но работает точно
Последний раз редактировалось kosmos440o; 17.01.2014 в 16:31.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 23:25.
|
|