реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> ds18b20 меряет не более 85 градусов
zltigo
сообщение Feb 6 2008, 10:20
Сообщение #16


Гуру
******

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



Цитата(masterpc @ Feb 6 2008, 13:11) *
не дает Вам права так невежественно относится к людям которые имеют меньше опыта в данном вопросе.

Невежественно??? Давайте забудем про "супермодераторов", давайте действительно забудем
Цитата
про код который приведен выше.

И действительно ДЛЯ НАЧАЛА напишем пару вменяемых сторочек. Можете считать, что это является тем абсолютным минимумом знания "С" и арифметики без которого идти дальше просто нельзя.
Исходные данные - есть байтовый буфер
BYTE scratchpad[]
куда процедура чтения сложила кучку байтиков, допустим, что валидность этой инфрмации мы уже проверили подсчитав CRC и в первых двух байтах этого буфера лежит верная температура.
Кто напишет первую строчку?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
masterpc
сообщение Feb 6 2008, 10:24
Сообщение #17


Частый гость
**

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



Цитата(zltigo @ Feb 6 2008, 12:20) *
И действительно ДЛЯ НАЧАЛА напишем пару вменяемых сторочек. Можете считать, что это является тем абсолютным минимумом знания "С" и арифметики без которого идти дальше просто нельзя. Кто напишет первую сточку?


Я не претендую на звание знатока Си или вообще чего либо. Сейчас я просто вывожу на ЖКИ два младших байта считанных из ОЗУ датчика. При нагреве я получаю 0х0550.

P.S.
Буду очень благодарен если Вы напишете мне кусок кода для преобразования полученных значений в температуру.

Сообщение отредактировал masterpc - Feb 6 2008, 10:27
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 6 2008, 10:44
Сообщение #18


Гуру
******

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



Цитата(masterpc @ Feb 6 2008, 13:24) *
Сейчас я просто вывожу на ЖКИ два младших байта считанных из ОЗУ датчика. При нагреве я получаю 0х0550.

Это отдельная проблема, истоки которой, как здесь уже говорили до меня кроятся в том, что преобразование было прервано. Начните с выдержек времени.
Цитата
Буду очень благодарен если Вы напишете мне кусок кода для преобразования полученных значений в температуру.

Ну вот sad.gif будет очередной огрызок кода взятый из интернету sad.gif. Правда утешает то, что вполне вменяемый smile.gif
Код
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
Go to the top of the page
 
+Quote Post
masterpc
сообщение Feb 6 2008, 10:52
Сообщение #19


Частый гость
**

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



Большое спасибо!!! Обязательно попробую, а пока буду искать что может прерывать преобразование.
Go to the top of the page
 
+Quote Post
masterpc
сообщение Feb 6 2008, 12:56
Сообщение #20


Частый гость
**

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



Разобрался с причиной - неправильно было организовано паразитное питание. Спасибо всем за поддержку!
Go to the top of the page
 
+Quote Post
GrayCat
сообщение Feb 6 2008, 22:33
Сообщение #21


Местный
***

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



Цитата(masterpc @ Feb 6 2008, 14:56) *
Разобрался с причиной - неправильно было организовано паразитное питание. Спасибо всем за поддержку!

Во-от, именно с этого и надо было начинать! А то "байты", "супермены" всякие...

Проверяется просто: покормить датчики нормальным отдельным питанием.

Было у меня еще подозрение на слишком "затянутый" импульс сброса перед командой считывания результата. При повышенной температуре и утечки в кристалле больше, накопительный конденсатор разряжается быстрее, и успевает совсем просесть за время импульса.

Ну, раз решили проблему - поздравляю! beer.gif


--------------------
Gray©at
Go to the top of the page
 
+Quote Post
MTh
сообщение Feb 8 2008, 09:04
Сообщение #22


Местный
***

Группа: Свой
Сообщений: 234
Регистрация: 28-02-06
Из: Иркутск
Пользователь №: 14 771



Цитата(masterpc @ Feb 6 2008, 15:56) *
Разобрался с причиной - неправильно было организовано паразитное питание. Спасибо всем за поддержку!


А можно поподробнее: что неправильно?
Go to the top of the page
 
+Quote Post
masterpc
сообщение Feb 8 2008, 12:40
Сообщение #23


Частый гость
**

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



Цитата(MTh @ Feb 8 2008, 11:04) *
А можно поподробнее: что неправильно?


Неправильно прописал макрос pulldown(). Когда нет обращений к датчику, стоит pullup(), потом, когда нужно считывать данные - pulldown(). Паразитное питание у меня организовано по схеме с полевиком, так вот я этот полевик не выключал как нужно. Как только макрос переписал, тут же все нормально стало. Сейчас на шине пять датчиков.
Go to the top of the page
 
+Quote Post
Krik99
сообщение May 17 2008, 16:10
Сообщение #24


Участник
*

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



У меня в протэусе всё работает, а на железе датчик выше 85 не меряет, и иногда при измерении, выдаёт ошику. Я использую готовую библиотеку CodeVisionAVR, только немного изменённую, там я в библиотеке останавливаю прерывания при обращении к 1wire. Даже при пробе переинициализации датчика во время температуры гдето 85, датчик не отвечает. Датчик подключен через экранированный стерео аудио кабель.
Вот схема:
Прикрепленное изображение

Говорят может датчик глюченый, вот скоро куплю другой и попробую. А вообще что может быть? За ранние благодарю.


--------------------
Go to the top of the page
 
+Quote Post
masterpc
сообщение May 17 2008, 19:39
Сообщение #25


Частый гость
**

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



Может с такотовой частотой процика связано? В протеусе одно а на самом деле что?
Go to the top of the page
 
+Quote Post
Kass
сообщение May 24 2008, 21:37
Сообщение #26





Группа: Новичок
Сообщений: 6
Регистрация: 11-03-08
Пользователь №: 35 809



Цитата(Krik99 @ May 17 2008, 19:10) *
датчик выше 85 не меряет, и иногда при измерении, выдаёт ошику. А вообще что может быть? За ранние благодарю.

Смотри в каком режиме питания у тебя датчик. Если в паразитном, то обеспечь необходимые для этого условия. Или на время преобразования обеспечивай подтяжку полевичком к +5. Можешь сделать так: попробуй сначала подключить питание +5 к ноге vdd датчика, если заработает нормально - попробуй с паразитным питанием. Вобщем скорее всего с этим проблема. А если с тактовой частотой процика чтото не то, то скорее всего у тебя датчик вообще не будет отвечать.
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 20:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.01733 секунд с 7
ELECTRONIX ©2004-2016