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

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

Сообщение ARV »

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

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

Сообщение sachok »

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

Сообщение ARV »

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

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

Сообщение sachok »

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

Сообщение delay »

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

Сообщение QZ_ »

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

Сообщение shtorm »

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

Сообщение GP1 »

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

Сообщение sachok »

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

Сообщение delay »

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

Сообщение sachok »

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

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

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

Сообщение delay »

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

Сообщение shtorm »

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

Сообщение 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);//отображаем текущее значение
} 

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

Сообщение shtorm »

думаю да, только про отрицательную температуру не забудь
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18679
Зарегистрирован: Чт дек 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);//отображаем текущее значение
} 
зачем выводить старое, если оно и так на дисплее?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

Сообщение delay »

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

Сообщение sachok »

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

Сообщение sachok »

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

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