Перейти к содержанию
    

Читаю температуру средствами кодевизион. Результат только при отключении прерывания на время чтения. В чем причина?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

что означает средствами кодевизион? Какого прерывания? Может быть что выполняемое во время чтения прерывание портит процедуру чтения. Нужно как то выкручиваться.

Изменено пользователем chief_olimp

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Контроллер мега 16. Термометр на рс.7. Есть прерывания по таймерам, ацп, уарт. Для чтения использую ds18b20.h из кодевизион.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так и должно быть. 1wire требует точных временнЫх интервалов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При работе с DS1820 требуется формирование импульсов определённой длительности. Причём если некоторые определяющие импульсы формируются с разбежкой T+100%, некоторые формируются достаточно точно. Например фронтовые.

 

Я в своей библиотеке запрещаю прерывания, там где это нужно. Поскольку запрет длится несколько тактов, то это не вызывает побочных эффектов. А основные задержки формируются при помощи таймера.

 

При таком подходе - никаких проблем не возникает. Если же у вас задержки формируются программно и/или прерывания обслуживаются значительное время (не верно написаны), то в этом случае датчик перестанет работать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я тоже запрещаю прерывания во время обмена с датчиком.

 

Во время работы с этим датчиков я тоже запрещаю прерывания но не постоянно, а только на то время когда идёт установка или считывание состояния пинов. На время задержек разрешаю т.к. часто страдает динамическая индикация и прерывания от ТС. Задержки там небольшие конечно и возникновение парочки прерываний их особо не портит (конечно если обработчик прерывания не сильно раздут, у меня в прерываниях от ТС только флаги выставляются).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в этом протоколе можно выделить задержки которые критичны и которые некритичны

 

прерывания можно запрещать только на время критичных задержек.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно ещё использовать COM порт. Смотреть там, "standard.pdf"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в этом протоколе можно выделить задержки которые критичны и которые некритичны

 

прерывания можно запрещать только на время критичных задержек.

это мне и надо. Как это сделать используя то что есть в кодевизион т.е. Стандартную библиотеку работы с датчиком или надо самому пропитывать, может кто поделится кусочком кода где это реализуется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Решил проблему изменив в ds18b20.h вместо delау_ms прописал задержку по таймеру и все заработало! Спасибо всем ответившим.:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я делал по другому, в стандартной либе перед обращением к либе с функциями 1Wire запрещал прерывание, а потом опять разрешал. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Когда работал в кодевизион (уже не помню версию) с таким же датчиком то столкнулся с проблемой неправильного вывода отрицательной температуры. Может конечно я чего то не дочитал. Просто интересно кто нить еще с этим сталкивался.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я делал так для отрицательной температуры:

if (temp>1000){ //если считали температуру больше 1000
temp=4096-temp; // отнимаем от температуры 4096
temp=-temp; // ставим знак минус
}

Изменено пользователем Krik99

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...