|
ds18b20 меряет не более 85 градусов |
|
|
|
Feb 6 2008, 10:20
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(masterpc @ Feb 6 2008, 13:11)  не дает Вам права так невежественно относится к людям которые имеют меньше опыта в данном вопросе. Невежественно??? Давайте забудем про "супермодераторов", давайте действительно забудем Цитата про код который приведен выше. И действительно ДЛЯ НАЧАЛА напишем пару вменяемых сторочек. Можете считать, что это является тем абсолютным минимумом знания "С" и арифметики без которого идти дальше просто нельзя. Исходные данные - есть байтовый буфер BYTE scratchpad[] куда процедура чтения сложила кучку байтиков, допустим, что валидность этой инфрмации мы уже проверили подсчитав CRC и в первых двух байтах этого буфера лежит верная температура. Кто напишет первую строчку?
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Feb 6 2008, 10:24
|

Частый гость
 
Группа: Участник
Сообщений: 124
Регистрация: 1-03-07
Из: Винница
Пользователь №: 25 788

|
Цитата(zltigo @ Feb 6 2008, 12:20)  И действительно ДЛЯ НАЧАЛА напишем пару вменяемых сторочек. Можете считать, что это является тем абсолютным минимумом знания "С" и арифметики без которого идти дальше просто нельзя. Кто напишет первую сточку? Я не претендую на звание знатока Си или вообще чего либо. Сейчас я просто вывожу на ЖКИ два младших байта считанных из ОЗУ датчика. При нагреве я получаю 0х0550. P.S. Буду очень благодарен если Вы напишете мне кусок кода для преобразования полученных значений в температуру.
Сообщение отредактировал masterpc - Feb 6 2008, 10:27
|
|
|
|
|
Feb 6 2008, 10:44
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(masterpc @ Feb 6 2008, 13:24)  Сейчас я просто вывожу на ЖКИ два младших байта считанных из ОЗУ датчика. При нагреве я получаю 0х0550. Это отдельная проблема, истоки которой, как здесь уже говорили до меня кроятся в том, что преобразование было прервано. Начните с выдержек времени. Цитата Буду очень благодарен если Вы напишете мне кусок кода для преобразования полученных значений в температуру. Ну вот  будет очередной огрызок кода взятый из интернету  . Правда утешает то, что вполне вменяемый  Код signed long meas = *((signed short *)&spad[0]); //если датчик 9 а не 12bit , то тогда еще meas <<= 3; //Результат в десятых градусах цельсия: signed int dcel = ((meas*FRACCONV)+500)/1000;
//Все!
//Если и минусы, то округление "сложнее": if( meas < 0 ) dcel = ((meas*FRACCONV)-500)/1000; else dcel = ((meas*FRACCONV)+500)/1000; FRACCONV это естественно - 625
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Feb 6 2008, 22:33
|

Местный
  
Группа: Свой
Сообщений: 263
Регистрация: 7-10-05
Из: UA
Пользователь №: 9 342

|
Цитата(masterpc @ Feb 6 2008, 14:56)  Разобрался с причиной - неправильно было организовано паразитное питание. Спасибо всем за поддержку! Во-от, именно с этого и надо было начинать! А то "байты", "супермены" всякие... Проверяется просто: покормить датчики нормальным отдельным питанием. Было у меня еще подозрение на слишком "затянутый" импульс сброса перед командой считывания результата. При повышенной температуре и утечки в кристалле больше, накопительный конденсатор разряжается быстрее, и успевает совсем просесть за время импульса. Ну, раз решили проблему - поздравляю!
--------------------
Gray©at
|
|
|
|
|
Feb 8 2008, 12:40
|

Частый гость
 
Группа: Участник
Сообщений: 124
Регистрация: 1-03-07
Из: Винница
Пользователь №: 25 788

|
Цитата(MTh @ Feb 8 2008, 11:04)  А можно поподробнее: что неправильно? Неправильно прописал макрос pulldown(). Когда нет обращений к датчику, стоит pullup(), потом, когда нужно считывать данные - pulldown(). Паразитное питание у меня организовано по схеме с полевиком, так вот я этот полевик не выключал как нужно. Как только макрос переписал, тут же все нормально стало. Сейчас на шине пять датчиков.
|
|
|
|
|
May 17 2008, 16:10
|

Участник

Группа: Участник
Сообщений: 45
Регистрация: 11-05-08
Из: Украина
Пользователь №: 37 411

|
У меня в протэусе всё работает, а на железе датчик выше 85 не меряет, и иногда при измерении, выдаёт ошику. Я использую готовую библиотеку CodeVisionAVR, только немного изменённую, там я в библиотеке останавливаю прерывания при обращении к 1wire. Даже при пробе переинициализации датчика во время температуры гдето 85, датчик не отвечает. Датчик подключен через экранированный стерео аудио кабель. Вот схема:
Говорят может датчик глюченый, вот скоро куплю другой и попробую. А вообще что может быть? За ранние благодарю.
--------------------
|
|
|
|
|
May 24 2008, 21:37
|
Группа: Новичок
Сообщений: 6
Регистрация: 11-03-08
Пользователь №: 35 809

|
Цитата(Krik99 @ May 17 2008, 19:10)  датчик выше 85 не меряет, и иногда при измерении, выдаёт ошику. А вообще что может быть? За ранние благодарю. Смотри в каком режиме питания у тебя датчик. Если в паразитном, то обеспечь необходимые для этого условия. Или на время преобразования обеспечивай подтяжку полевичком к +5. Можешь сделать так: попробуй сначала подключить питание +5 к ноге vdd датчика, если заработает нормально - попробуй с паразитным питанием. Вобщем скорее всего с этим проблема. А если с тактовой частотой процика чтото не то, то скорее всего у тебя датчик вообще не будет отвечать.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|