Вопросы по работе с термометрами DS18B20
- sachok
- Опытный кот
- Сообщения: 849
- Зарегистрирован: Сб янв 05, 2008 11:05:15
- Откуда: Україна м.Луцьк
- Контактная информация:
Вот решил переписать свою программку и делать опрос датчиков 1 раз в 2 секунди. завел таймер в нем считаем время (точнее инкрементируем переменную) потом в бесконечном цикле проверяем єту переменную и если она равна 100(єто за 2 секунды должно натикать) то запускаем функцию измерения температуры. но увы на дисплее полный бред и нифига не работает. прилагается участок программы.
- Вложения
-
- untitled.c
- (2.89 КБ) 450 скачиваний
Я не Сашок!!!
- lkote68
- Прорезались зубы
- Сообщения: 231
- Зарегистрирован: Пн мар 30, 2009 15:58:32
- Откуда: Украина Запорожье
Вопросы по работе с термометрами DS18B20
А что ж там на экране будет Судя по исходникам Вход в бесконеч цикл
А в temp (); вы меряете температуру 3 раза а выводите один Может тут и собака порылась
while (1)
{
// Place your code here
if (t==100)
{
temp ();
t=0;
}
};
А в temp (); вы меряете температуру 3 раза а выводите один Может тут и собака порылась
void temp (void)
{
for (i=0;i<devices;)
{
#asm("cli")
ds18b20_init(&rom_code[0][0],0,85,DS18B20_9BIT_RES);
temp1=ds18b20_temperature(&rom_code[0][0]);
sprintf(lcd_buffer1,"t%u=%i\xdfC",i+1,temp1);
lcd_gotoxy(0,0);
lcd_puts(lcd_buffer1);
ds18b20_init(&rom_code[1][0],0,85,DS18B20_9BIT_RES);
temp2=ds18b20_temperature(&rom_code[1][0]);
sprintf(lcd_buffer3,"t%u=%i\xdfC",i,temp3);
ds18b20_init(&rom_code[2][0],0,85,DS18B20_9BIT_RES);
temp3=ds18b20_temperature(&rom_code[2][0]);
sprintf(lcd_buffer3,"t%u=%i\xdfC",i+3,temp3);
#asm("sei")
}
}
- lkote68
- Прорезались зубы
- Сообщения: 231
- Зарегистрирован: Пн мар 30, 2009 15:58:32
- Откуда: Украина Запорожье
Вопросы по работе с термометрами DS18B20
А вы не забыли в цикле инкремент i поставить?
А вообще я бы вашу функцию записал бы так если я конечно правильно понял что вы хотели.
А вообще я бы вашу функцию записал бы так если я конечно правильно понял что вы хотели.
void temp (void)
{
#asm("cli")
for (i=0;i<devices;i++)
{
ds18b20_init(&rom_code[i][0],0,85,DS18B20_9BIT_RES);
temp=ds18b20_temperature(&rom_code[i][0]);
sprintf(lcd_buffer,"t%u=%i\xdfC",i,temp);
if(i==0){
lcd_gotoxy(0,0);
lcd_puts(lcd_buffer1);
}
if(i==1)temp2 = temp;
if(i==2)temp3 = temp;
}
#asm("sei")
}
- lkote68
- Прорезались зубы
- Сообщения: 231
- Зарегистрирован: Пн мар 30, 2009 15:58:32
- Откуда: Украина Запорожье
Вопросы по работе с термометрами DS18B20
Ну не совсем равносильно. Во первых кода меньше.
- lkote68
- Прорезались зубы
- Сообщения: 231
- Зарегистрирован: Пн мар 30, 2009 15:58:32
- Откуда: Украина Запорожье
Вопросы по работе с термометрами DS18B20
Уважаемые Коты. Подскажите схемное решение Нужно отвязать гальванически ногу Аtmela от сети DS18b20.
- lkote68
- Прорезались зубы
- Сообщения: 231
- Зарегистрирован: Пн мар 30, 2009 15:58:32
- Откуда: Украина Запорожье
Вопросы по работе с термометрами DS18B20
Порт занят для связи с пк. Опрос датчиков идет одному из битов порта D. Вот его и хочу отвязать. Или это не реально? Может я чет не догоняю.
- lkote68
- Прорезались зубы
- Сообщения: 231
- Зарегистрирован: Пн мар 30, 2009 15:58:32
- Откуда: Украина Запорожье
Вопросы по работе с термометрами DS18B20
Так то оно так, но так бы я сделал если бы писал на асме. Программа написана на CodeVision. Во первых там библиотека поддерживает опрос только через один бит (или надо править библиотеку). Если бы писал на асме я бы многое не так сделал. Тут есть мои посты с вопросами как бы развесить по сети на битам чтобы сегментировать сеть. Вопрос как раз в том чтобы отвязать один бит.
-
clawham
- Поставщик валерьянки для Кота
- Сообщения: 1957
- Зарегистрирован: Пт окт 31, 2008 09:38:55
- Откуда: Одесса
- Контактная информация:
Здравствуйте, есть такой вопрос - у ДС18Б20 есть одна интересная команда - Скип ром, которая как бы адресует следующую команду не к конкретному ДС а ко всем - и вот в чем суть вопроса - запускаем в шину команду скип ром(SKIP ROM [CCh]) после неё шлём команду на начало преобразования (CONVERT T [44h]) ждём одну секунду(ну или занимаемся своими делами в МК - вроде как не проблема - нужен только "Стронг Пуллап" шины....а потом - чтение (сначала выбор девайса - MATCH ROM [55h] а потом считывание - READ SCRATCHPAD [BEh]) - тоесть по идее время на передачу данных - мизер по сравнению со "ждать завершения преобразования" ? ну чтоб не простаивать 750 миллисек на каждом
и второй вопрос - а как будут вести себя другие сволочи на 1wire шине? у меня там ещё RTC и оцифраторы 16-тибитные 4-х канальные
и второй вопрос - а как будут вести себя другие сволочи на 1wire шине? у меня там ещё RTC и оцифраторы 16-тибитные 4-х канальные
-
Skrrmrchoh
- Нашел транзистор. Понюхал.
- Сообщения: 185
- Зарегистрирован: Чт сен 06, 2007 22:36:09
- Откуда: Санкт-Петербург
Vov123 писал(а):если просто получить значения,то как вариант можно так,только с типами не путайте,если больше 255,то int a,b,c,d;
d=25.3*10
a=d/100;
b=(d%100)/10;
c=d-((a*100)+(b*10));
Получить бы эту самую d....
Видимо, это стандартная кодевиженовская функция.
Вот такая.
temp=ds1820_temperature_10(&rom_code[i][0]);
Переменная temp типа int. Вопрос#1: что будет в той переменной если температура равна 25,3?
Вопрос#2 что это такое: (&rom_code[i][0]), а также что такое i ?
Еще. В тех двух примерах, которые я ковыряю есть некие (малопонятно для меня как работающие ) функции поиска датчиков на шине. Так вот, после процедуры поиска в обоих примерах количество выводится на дисплей. Эти функции поиска необходимы только для работы с несколькими датчиками? Если датчик один, то...они не нужны?
Последний раз редактировалось Skrrmrchoh Чт апр 23, 2009 13:51:00, всего редактировалось 1 раз.
- lkote68
- Прорезались зубы
- Сообщения: 231
- Зарегистрирован: Пн мар 30, 2009 15:58:32
- Откуда: Украина Запорожье
Вопросы по работе с термометрами DS18B20
Уважаемые Коты. Где то с месяц я возился со своим изваянием. Выражаю признательность YellowTiger и ARV. Все заработало меряет, по порту отсылает. Красота. Захотел попробовать посадить
DSки на паразитное питание получил где то слышаное мною значение 85. При этом адрес считывается.
DSки на паразитное питание получил где то слышаное мною значение 85. При этом адрес считывается.
- Pooher
- Мучитель микросхем
- Сообщения: 491
- Зарегистрирован: Вс янв 07, 2007 01:45:48
- Откуда: Российская Федерация, будь она неладна...
Re: Вопросы по работе с термометрами DS18B20
lkote68 писал(а): посадить DSки на паразитное питание
После запуска преобразования температуры надо подключать к шине 1-wire жёсткую подтяжку питания (резистору не вытянуть ток необходимый для АЦП датчиков). Хотя я просто запускал преобразование в каждом датчике отдельно, и при 10 датчиках и метрах 100-а провода (евро телефонки) всё работает "на ура".
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
- adrenocrome
- Потрогал лапой паяльник
- Сообщения: 365
- Зарегистрирован: Вт окт 21, 2008 15:03:06
- Откуда: moscow
- Контактная информация:
Skrrmrchoh писал(а):Видимо, это стандартная кодевиженовская функция.
Вот такая.
temp=ds1820_temperature_10(&rom_code[i][0]);
Переменная temp типа int. Вопрос#1: что будет в той переменной если температура равна 25,3?
А не float там должен быть? как в int впихнуть не целое число? о_О
По-моему в примерах от старого КодВижн там был именно float. А в кодвижн2 посмотрел, действительно, int ... странно.
- lkote68
- Прорезались зубы
- Сообщения: 231
- Зарегистрирован: Пн мар 30, 2009 15:58:32
- Откуда: Украина Запорожье
Вопросы по работе с термометрами DS18B20
Уважаемые Коты Растолкуйте плиз даташит DS18b20. работает у меня схема с экстарнал питанием. Кое где по ссылкам я нашел что достаточным условием для перевода на паразитное является коротыш на 1.3 ноги ДСки. Ну ни фига не работает. Так ли это?
В даташите там еще полевик и тоже как и резистор на питание. Не совсем пойму как им управлять
Зарабтало уменьшил подтяжку до 1кОм все теперь и с паразитным работает. Но вопрос по поводу полевика остался. Да и к стати что это за странное изображения полевика. Или кружок обозначает ставьте любой проводимости лижбы инвертировал ноль в 1 ну типа как в логике?
В даташите там еще полевик и тоже как и резистор на питание. Не совсем пойму как им управлять
Зарабтало уменьшил подтяжку до 1кОм все теперь и с паразитным работает. Но вопрос по поводу полевика остался. Да и к стати что это за странное изображения полевика. Или кружок обозначает ставьте любой проводимости лижбы инвертировал ноль в 1 ну типа как в логике?
