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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

delay писал(а):
ARV писал(а):во-вторых, место вывода (7-сегментник или что-то иное), как мне кажется, решающей роли не играет...

А я думал, что на ЖК дисплей можно вывести значение, как есть, а для 7-сегментного нужно выводить цыфры.
как есть - это как?!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
sachok
Опытный кот
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк
Контактная информация:

Сообщение sachok »

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

Сообщение ARV »

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

Мой уютный бложик... заходите!
Аватара пользователя
sachok
Опытный кот
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк
Контактная информация:

Сообщение sachok »

Такие глюки можут быть связаны с использованием стандартной библиотеки для датчиков?
Я не Сашок!!!
Аватара пользователя
delay
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Чт мар 20, 2008 20:33:43
Контактная информация:

Сообщение delay »

Я использую стандартные функции Code Vision. Подключены 3 датчика. Термометр работает круглые сутки несколько месяцев. Подобного глюка не наблюдал.
QZ_
Открыл глаза
Сообщения: 70
Зарегистрирован: Чт дек 20, 2007 14:47:31
Откуда: Челябинск
Контактная информация:

Сообщение QZ_ »

sachok писал(а):В чем может бить проблема?:иногда от датчиков приходит 9999 градусов цельсия. Программный или аппаратный глюк?

праильно говорят, если порыть codevision'скую библиотечку для этого датчика, то, при ошибке он возвращает 9999
Аватара пользователя
shtorm
Нашел транзистор. Понюхал.
Сообщения: 185
Зарегистрирован: Чт янв 22, 2009 14:03:25
Контактная информация:

Сообщение shtorm »

по своему опыту могу сказать что это кривое вычитывание с датчика, либо кварц не соответствует номиналу либо мк отвлекаеться на что-то другое пока опрашивает, попробуй останавливать мк во время опроса
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Сообщение GP1 »

Предыдущий выступающий наверное имел ввиду: запрещай прерывания на время считывния :))
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
sachok
Опытный кот
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк
Контактная информация:

Сообщение sachok »

Я понял:) Останавливать не могу так как жестко привязан к времени, просто игнорирую и всё:) не так уж и часто это бывает
Я не Сашок!!!
Аватара пользователя
delay
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Чт мар 20, 2008 20:33:43
Контактная информация:

Сообщение delay »

Ну так если не запрещать прерывания на время опроса датчиков - наверняка будут сбои. У меня зарпещаются.
Аватара пользователя
sachok
Опытный кот
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк
Контактная информация:

Сообщение sachok »

Понятно. Вот так запрещать и возобновлять?

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

#asm("cli")            
temp1=ds18b20_temperature(&rom_code[0][0]);
#asm("sei")
Я не Сашок!!!
Аватара пользователя
delay
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Чт мар 20, 2008 20:33:43
Контактная информация:

Сообщение delay »

Да. Создает определенные неудобства, например при использовании динамической индикации, обработка которой находится в прерывании. Возможно для тех, кто уже имеет опыт в данном вопросе, этим маневрирует легко. А возможно, как вы предположили выше, просто прописать игнорирование в случае получения данного сигнала ошибки.
Аватара пользователя
shtorm
Нашел транзистор. Понюхал.
Сообщения: 185
Зарегистрирован: Чт янв 22, 2009 14:03:25
Контактная информация:

Сообщение shtorm »

помоему sachok имел ввиду просто не обращать внимание на это а не игнорировать программно :))) хотя идея хорошая...использовать буфер
Аватара пользователя
sachok
Опытный кот
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк
Контактная информация:

Сообщение sachok »

Попробую так как писал выше посмотрю и отпишусь как работает.
Я не Сашок!!!
Аватара пользователя
sachok
Опытный кот
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк
Контактная информация:

Сообщение sachok »

Со временем шплошные проблемы вышли пришол в голову такой вариант:

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

temp1=ds18b20_temperature(&rom_code[0][0]);//меряем температуру
if (temp1==9999)
{
lcd_gotoxy(0,0);
lcd_puts(lcd_buffer);//выводим предыдущие значение
}
else
{
sprintf(lcd_buffer,"t%u=%i\xdfC",i+1,temp1);
lcd_gotoxy(0,0);
lcd_puts(lcd_buffer);//отображаем текущее значение
}

Господа как думаете работать будет?
Я не Сашок!!!
Аватара пользователя
shtorm
Нашел транзистор. Понюхал.
Сообщения: 185
Зарегистрирован: Чт янв 22, 2009 14:03:25
Контактная информация:

Сообщение shtorm »

думаю да, только про отрицательную температуру не забудь
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

sachok, не логичнее ли будет так:

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

temp1=ds18b20_temperature(&rom_code[0][0]);//меряем температуру
if (temp1!=9999)
{
sprintf(lcd_buffer,"t%u=%i\xdfC",i+1,temp1);
lcd_gotoxy(0,0);
lcd_puts(lcd_buffer);//отображаем текущее значение
}
зачем выводить старое, если оно и так на дисплее?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
delay
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Чт мар 20, 2008 20:33:43
Контактная информация:

Сообщение delay »

sachok, а как часто у вас происходит прерывание (я), и как часто опрашивается датчик? И сколько датчиков?
Аватара пользователя
sachok
Опытный кот
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк
Контактная информация:

Сообщение sachok »

2 ARV Ну да не подумал:)
Датчика у меня 3. прерывания внутрение 50 раз в секунду и внешние по входу INT0. Датчики опрашиваю не самым лучшим методом - в бесконечном цикле.
Я не Сашок!!!
Аватара пользователя
sachok
Опытный кот
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк
Контактная информация:

Сообщение sachok »

А 85 градусов это кажись - преобразование не виполнено. Что может быть причиной такого глюка. Периодически проскакивают 85 градусов когда дожно бить 25
Я не Сашок!!!
Закрыто

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