andr_k5 0 2 ноября, 2009 Опубликовано 2 ноября, 2009 · Жалоба Читаю температуру средствами кодевизион. Результат только при отключении прерывания на время чтения. В чем причина? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
chief_olimp 0 2 ноября, 2009 Опубликовано 2 ноября, 2009 (изменено) · Жалоба что означает средствами кодевизион? Какого прерывания? Может быть что выполняемое во время чтения прерывание портит процедуру чтения. Нужно как то выкручиваться. Изменено 2 ноября, 2009 пользователем chief_olimp Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andr_k5 0 2 ноября, 2009 Опубликовано 2 ноября, 2009 · Жалоба Контроллер мега 16. Термометр на рс.7. Есть прерывания по таймерам, ацп, уарт. Для чтения использую ds18b20.h из кодевизион. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fmdost 0 2 ноября, 2009 Опубликовано 2 ноября, 2009 · Жалоба Так и должно быть. 1wire требует точных временнЫх интервалов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SapegoAL 0 2 ноября, 2009 Опубликовано 2 ноября, 2009 · Жалоба При работе с DS1820 требуется формирование импульсов определённой длительности. Причём если некоторые определяющие импульсы формируются с разбежкой T+100%, некоторые формируются достаточно точно. Например фронтовые. Я в своей библиотеке запрещаю прерывания, там где это нужно. Поскольку запрет длится несколько тактов, то это не вызывает побочных эффектов. А основные задержки формируются при помощи таймера. При таком подходе - никаких проблем не возникает. Если же у вас задержки формируются программно и/или прерывания обслуживаются значительное время (не верно написаны), то в этом случае датчик перестанет работать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uriy 5 3 ноября, 2009 Опубликовано 3 ноября, 2009 · Жалоба Я тоже запрещаю прерывания во время обмена с датчиком. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mempfis_ 0 3 ноября, 2009 Опубликовано 3 ноября, 2009 · Жалоба Я тоже запрещаю прерывания во время обмена с датчиком. Во время работы с этим датчиков я тоже запрещаю прерывания но не постоянно, а только на то время когда идёт установка или считывание состояния пинов. На время задержек разрешаю т.к. часто страдает динамическая индикация и прерывания от ТС. Задержки там небольшие конечно и возникновение парочки прерываний их особо не портит (конечно если обработчик прерывания не сильно раздут, у меня в прерываниях от ТС только флаги выставляются). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krik99 0 3 ноября, 2009 Опубликовано 3 ноября, 2009 (изменено) · Жалоба mempfis_ опередил :) Изменено 3 ноября, 2009 пользователем Krik99 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 3 ноября, 2009 Опубликовано 3 ноября, 2009 · Жалоба в этом протоколе можно выделить задержки которые критичны и которые некритичны прерывания можно запрещать только на время критичных задержек. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fmdost 0 4 ноября, 2009 Опубликовано 4 ноября, 2009 · Жалоба Можно ещё использовать COM порт. Смотреть там, "standard.pdf" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andr_k5 0 4 ноября, 2009 Опубликовано 4 ноября, 2009 · Жалоба в этом протоколе можно выделить задержки которые критичны и которые некритичны прерывания можно запрещать только на время критичных задержек. это мне и надо. Как это сделать используя то что есть в кодевизион т.е. Стандартную библиотеку работы с датчиком или надо самому пропитывать, может кто поделится кусочком кода где это реализуется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andr_k5 0 4 ноября, 2009 Опубликовано 4 ноября, 2009 · Жалоба Решил проблему изменив в ds18b20.h вместо delау_ms прописал задержку по таймеру и все заработало! Спасибо всем ответившим.:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krik99 0 4 ноября, 2009 Опубликовано 4 ноября, 2009 · Жалоба Я делал по другому, в стандартной либе перед обращением к либе с функциями 1Wire запрещал прерывание, а потом опять разрешал. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
*ZEVS* 0 4 ноября, 2009 Опубликовано 4 ноября, 2009 · Жалоба Когда работал в кодевизион (уже не помню версию) с таким же датчиком то столкнулся с проблемой неправильного вывода отрицательной температуры. Может конечно я чего то не дочитал. Просто интересно кто нить еще с этим сталкивался. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krik99 0 4 ноября, 2009 Опубликовано 4 ноября, 2009 (изменено) · Жалоба Я делал так для отрицательной температуры: if (temp>1000){ //если считали температуру больше 1000 temp=4096-temp; // отнимаем от температуры 4096 temp=-temp; // ставим знак минус } Изменено 4 ноября, 2009 пользователем Krik99 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться