Вопросы по работе с термометрами DS18B20

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
roma
Встал на лапы
Сообщения: 133
Зарегистрирован: Вс сен 13, 2009 23:38:58
Откуда: Шелехов ирк обл

re

Сообщение roma »

Аlex писал(а):Не нужно ничего ждать. После команды преобразования подождите 1 сек, имп. сброса, выбор датчика либо пропуск РОМ, затем читаем температуру. Всё !


Я первоначально именно так и сделал. В итоге всё время на семисегментном индикаторе отображается число 85 и не каких изменений даже если охладить или нагреть датчик.
Реклама
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

Сообщение AI_Disable »

Подскажите, что за хрень? В протеусе конвертация температуры происходит мгновенно! То есть, сразу после отправки команды "Convert T", можно уже сбрасывать датчик и считывать результат. И он оказывается верным.
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

AI_Disable писал(а):Подскажите, что за хрень? В протеусе конвертация температуры происходит мгновенно! То есть, сразу после отправки команды "Convert T", можно уже сбрасывать датчик и считывать результат. И он оказывается верным.
не замечал такого эффекта... может, версия древняя у вас? но во всяком случае протеус - это глюкавый протеус, чего от него требовать! :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

Re: re

Сообщение md5sum »

roma писал(а):В итоге всё время на семисегментном индикаторе отображается число 85 и не каких изменений даже если охладить или нагреть датчик.


Опять datasheet (как много там интересного :)) )
*The power-on reset value of the temperature register is +85°C.

Следовательно датчик правильно возвращает начальное значение по причинам:
1. не получил команду convert t
2. был сброшен по питанию (слишком длинный init)

Как питаете датчик?

2: Alex datasheet лучше читать "родные" с сайта производителя, т.к. при переводе многое изменяется до неузнаваемости....
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Сообщение md5sum »

Добавлю пункты:

3. Датчик не получил желаемые 1,5 мА при паразитном питании
4. При паразитном питании нога Vdd не подключена к GND
Реклама
roma
Встал на лапы
Сообщения: 133
Зарегистрирован: Вс сен 13, 2009 23:38:58
Откуда: Шелехов ирк обл

Re: re

Сообщение roma »

md5sum писал(а):
roma писал(а):
Как питаете датчик?

2: Alex datasheet лучше читать "родные" с сайта производителя, т.к. при переводе многое изменяется до неузнаваемости....


Датчик питаю от внешнего источника. А что означает сброс по питанию слишком длинный init?
Когда в AVR studio отлаживаю програмулину то вижу что всё передаётся правильно.
Реклама
artko
Родился
Сообщения: 1
Зарегистрирован: Пт дек 04, 2009 12:11:04
Откуда: DP,UA
Контактная информация:

Re: re

Сообщение artko »

roma писал(а):Когда в AVR studio отлаживаю програмулину то вижу что всё передаётся правильно.


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

Re: re

Сообщение md5sum »

roma писал(а): А что означает сброс по питанию слишком длинный init?

Это касается только паразитного питания....
Аватара пользователя
ssvd
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Ср ноя 04, 2009 18:00:56
Откуда: Алтайский край
Контактная информация:

Сообщение ssvd »

есть вот такой код, датчик ds18b20 находится в комнате, постоянно показывает температуру: 241
кто сталкивался с таким?

Код: Выделить всё

  lcd_init(16);
  __beep(50);

  devices=w1_search(0xf0,rom_codes);

    while(1){

  temp=ds18b20_temperature(&rom_codes[0][0]);
  if ( temp & 0x8000){
    temp^=0xFFFF;
    temp++;
  }
   sprintf(lcd_buffer,"Temp in=%i.%u\xdfC",temp,temp%1);
   lcd_gotoxy(0,0);
        lcd_puts(lcd_buffer);


    }       

 
}
VIY
Открыл глаза
Сообщения: 55
Зарегистрирован: Вт май 01, 2007 12:01:53
Откуда: Минск

Re: Вопросы по работе с термометрами DS18B20

Сообщение VIY »

УРРААААА!! Товарищи коты! :)) Заработала!!!!!! :)))

Чтоб другие по моим граблям не топтались,(на которых я уже МЕСЯЦА ДВА танцую!)
ОКАЗЫВАЕТСЯ тайм-слот контроллера "читать бИт" НЕ ДОЛЖЕН БЫТЬ больше микросекунды!!
В описании "Интерфейс 1-Wire.(автор ARV)" рассказано много о том, какие широкие диапазоны у этого интерфейса, и безобидный намёк > 1 микросек.(больше микросекунды) , и то, что опрос нужно устраивать на 14-15-ой микросекунде после начала таймслота наводят на праздные размышления о написании махонькой функции, которая будет отсчитывать микросекунды, и забить на *почти микросекунду*, необходимую чтобы обратится к ней, и вернуться обратно...
Оказалось ВСЁ НЕ ТАК!.. ( > 1 микросек.(больше микросекунды) не правильно, нужно = 1 микросек.(и ни как не иначе!) )
Я очень долго не мог получить ответа от датчика.. запрашивал у своей функции "еденичку". В ответ от датчика мне сыпались лишь единички :(. Как я только не корячился, (целую статью можно написать),.. в результате у меня получилась целая коллекция подпрограммок для тестирования того, что происходит на линии...
Первое, RESET PRESENCE...
Точное время PRESENCE 30 -- 140 микросекунд после RESET-а(нет там ни плаваний значения ни вариаций).
Во вторых простое опрашивание пина командой *sbic* более одного раза за один тайм-слот, каким-то странным образом сбивается результат (сперва я писал программки которые делали множество опросов на протяжении промежутка в котором нужно ловить PRESENCE(в результате получал нечто непредсказуемое(но повторяемое!). Было даже решил, что неисправен датчик). мои сомнения закончились когда я написал программку, которая запрашивала "PRESENCE" для каждого нового опроса,.. Так я и выстроил эту шкалу 30 --140 мкс.)
Второе.. Как я уже писал выше, мне не удалось получить ответных БИТов от датчика, пака тайм чтения был две микросекунды(из-за нескольких паразитных операций). НАКОНЕЦ ТО я решился заменить обращение к функции на nop-ы, сделав тайм-опрос ТОЧНО микросекундой, и ВСЁ ЗАРАБОТАЛО! :beer: ... Приспособленная мною программка для составления временной шкалы уже была прицеплена, и поэтому я вот ещё что узнал, если датчик шлёт "0", то он удерживает линию ровно до 26-ой микросекунды. При этом точность снятия еденичек и ноликов АБСОЛЮТНА, т.е. если я читаю через пол микросекунды после отпускания линии, то результат ВСЕГДА читается верно, так-же как и на 26-ой микросекунде,.. На 27-ой секунде уже идёт совершенно стабильный высокий уровень(ни единого нолика не проскальзывает!).

Ох и найифался я с этой злосчастной микросекундой... Постукаюсь к автору, может добавит эту поправку... нужно = 1 микросек.(и ни как не иначе!)
Последний раз редактировалось VIY Вт мар 23, 2010 10:18:22, всего редактировалось 1 раз.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Вопросы по работе с термометрами DS18B20

Сообщение ARV »

VIY писал(а):Ох и найифался я с этой злосчастной микросекундой... Постукаюсь к автору, может добавит эту поправку...
уже ответил в теме о статье. без эмоций: ваш частный случай не есть закономерность.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
VIY
Открыл глаза
Сообщения: 55
Зарегистрирован: Вт май 01, 2007 12:01:53
Откуда: Минск

Re: Вопросы по работе с термометрами DS18B20

Сообщение VIY »

Всё, успокоился, выспался :).. Всем спасибо..
Наконец-то можно заняться самим девайсом.. :)..
Я ведь ещё летом написал программу работы с интерфейсом, но тогда быстро забросил,.. так-что в сумме 3 месяца!!! Ну как-же тут без эмоций совсем уж :).
Аватара пользователя
Хатуль_мадан
Электрический кот
Сообщения: 1006
Зарегистрирован: Ср мар 03, 2010 11:48:00
Откуда: Уфа

Re: Вопросы по работе с термометрами DS18B20

Сообщение Хатуль_мадан »

VIY писал(а):Чтоб другие по моим граблям не топтались,(на которых я уже МЕСЯЦА ДВА танцую!)
ОКАЗЫВАЕТСЯ тайм-слот контроллера "читать бИт" НЕ ДОЛЖЕН БЫТЬ больше микросекунды!! .......

Ох и найифался я с этой злосчастной микросекундой... Постукаюсь к автору, может добавит эту поправку... нужно = 1 микросек.(и ни как не иначе!)

Что-то не совсем понятно, в описании сказано не менее 1мкС!! Вот тоже, только вчера закончил конструкцию термостата на таком датчике, так вот просто теоретически не могу получить надежный тайм-слот менее 2мкС при частоте кварца 4мГц. Вроде все работает. Беда была со считыванием, но при длинном шлейфе и импульсной помехи с импульсного блока питания, вылечилось установкой керамического кондера на 2,2нФ 1кВ между цифровой землей и питающим минусом сети. Теперь 5м кабель от датчика и вроде сбоев нет. А сначала тоже грешил на временные интервалы и возможные косяки с подпрограммой чтения из датчика. В электронике опыт большой, а вот изучать программирование начал недавно, потребности не возникало. Можно поподробнее, что вы называете "тайм-слотом контроллера "читать бИт" НЕ ДОЛЖЕН БЫТЬ больше микросекунды!" может у себя еще что подправлю.
Аватара пользователя
sheva_s
Грызет канифоль
Сообщения: 256
Зарегистрирован: Пт апр 27, 2007 14:32:48
Откуда: Украина Кривой Рог
Контактная информация:

Re: Вопросы по работе с термометрами DS18B20

Сообщение sheva_s »

Нужна подправленая библиотека для КОД ВИЖЕН работы с датчиком DS18B20 что бы занимала поменьше места в памяти контролера . Нужно связать ТИННИ13 и датчик DS18B20 что бы уместить программный код , стандартная библиотека не влезет . У меня была подправленая которая влазила в нужные мне размеры но после замены жесткого диска исчезла. А найти немогу . Может у когото есть поделитесь. Нужно просто сделать термостат на такой связки ТИННИ13 и датчик DS18B20 ( схема уже собрана и работала вот нужно поменять пороги температуры, а библиотеки нету.
Может кому интересно код самой программы для ТИННИ13

Код: Выделить всё

#include <tiny13.h>   
#include <delay.h>

int T;


// 1 Wire Bus functions
#asm
   .equ __w1_port=0x18 ;PORTB
   .equ __w1_bit=4
#endasm
#include <1wire.h>

// DS1820 Temperature Sensor functions
#include <ds18b20_.h> 

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port B initialization
// Func5=In Func4=In Func3=In Func2=In Func1=Out Func0=Out
// State5=T State4=T State3=T State2=P State1=0 State0=0
PORTB=0x04;
DDRB=0x03;


// 1 Wire Bus initialization
w1_init();
ds18b20_init(0,0,0,DS18B20_9BIT_RES);

while (1)
      {
T = ds18b20_temperature(0)/16;     //запускаем измерение температуры   

        PORTB.0=~PORTB.0;
        delay_ms(450);

 
 if(T!=-9999){                               //если нету ошибки преобразование продолжаем     
         if(T>=22) PORTB.1=0;   //включаем нагреватель
         if(T<=23) PORTB.1=1;    //выключаем нагреватель   
                  };
                       
      };
}
Закрыто

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