реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Датчик температуры DS18B20 и прерывания
k000858
сообщение Jul 16 2013, 06:08
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Работа с датчиком основывается на точных задержках при маханиях ножкой (1wire). В больших проектах, где используется много прерываний, точные задержки могут растягиваться (по скольку во время выполнения задержек срабатывают прерывания, да не по одной штуки и тд). В результате показания с датчика могут сниматься некорректные. Как вы с этим боритесь? Запрещать прерывания на время выполнения задержек не вариант т.к. могут быть пропуски прерываний.
Go to the top of the page
 
+Quote Post
1113
сообщение Jul 16 2013, 06:13
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 604
Регистрация: 24-02-06
Из: Москва
Пользователь №: 14 658



вешать 1-wire на какой-то апаратный интерфейс, некоторые его умудряются даже USART`ом эмулировать.
Go to the top of the page
 
+Quote Post
firew0rker
сообщение Jul 16 2013, 07:34
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 11-07-12
Из: Новосибирск
Пользователь №: 72 716



Цитата(1113 @ Jul 16 2013, 13:13) *
вешать 1-wire на какой-то апаратный интерфейс, некоторые его умудряются даже USART`ом эмулировать.


Доводилось эмулировать 1-wire с помощью SPI.

Код
unsigned char w1_io( unsigned char b )
{
  unsigned char r, j;
  j = 8;
  do{
    if (b & 1) r=xchg_spi(0x7F); else r=xchg_spi(1);
    b >>= 1;
    if (r == 0x7F) b |= 0x80;
    }while( --j );
  return b;
}


Сообщение отредактировал firew0rker - Jul 16 2013, 07:37
Go to the top of the page
 
+Quote Post
k000858
сообщение Jul 16 2013, 07:45
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



я так понимаю, временные задержки интерфейс соблюдает сам?
Go to the top of the page
 
+Quote Post
1113
сообщение Jul 16 2013, 07:50
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 604
Регистрация: 24-02-06
Из: Москва
Пользователь №: 14 658



Цитата(k000858 @ Jul 16 2013, 10:45) *
я так понимаю, временные задержки интерфейс соблюдает сам?
именно так. исходя из его baudrate`а.
Go to the top of the page
 
+Quote Post
VAI
сообщение Jul 16 2013, 08:07
Сообщение #6


Профессионал
*****

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



Вот тут я выкладывал исходники для работы с несколькими DS18B20 используя прерывание по Compare и ногодрыг. Работают в нескольких проектах на разных типах процессоров. Я использовал от 2-х до 8 DS18B20. Проблем никаких.
http://electronix.ru/forum/index.php?showt...p;#entry1089884


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jul 16 2013, 08:11
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



а можно ЦПЛД махонькую воткнуть чтобы она все собирала и у себя хранила, пока проц не забирет...
Go to the top of the page
 
+Quote Post
k000858
сообщение Jul 16 2013, 08:13
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Цитата(VAI @ Jul 16 2013, 11:07) *
Вот тут я выкладывал исходники для работы с несколькими DS18B20 используя прерывание по Compare и ногодрыг. Работают в нескольких проектах на разных типах процессоров. Я использовал от 2-х до 8 DS18B20. Проблем никаких.
http://electronix.ru/forum/index.php?showt...p;#entry1089884

Исходники пока не смотрел, но сразу вопрос: что будет, если во время задания таймслота чтения/записи сработает другое прерывание, обработка которого займет некоторое время, в результате чего четкий таймслот будет нарушен?
Go to the top of the page
 
+Quote Post
VAI
сообщение Jul 16 2013, 08:36
Сообщение #9


Профессионал
*****

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



Цитата(k000858 @ Jul 16 2013, 12:13) *
Исходники пока не смотрел, но сразу вопрос: что будет, если во время задания таймслота чтения/записи сработает другое прерывание, обработка которого займет некоторое время, в результате чего четкий таймслот будет нарушен?

Для таймслотов существует диапазон значений, а не строго N микросекунд.
Для STM32 можно при настройке контроллера прерываний задать приоритеты каждому прерыванию. Ну и в перрывании не надо сидеть слишком долго...


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
adnega
сообщение Jul 16 2013, 08:50
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(VAI @ Jul 16 2013, 12:36) *
Для таймслотов существует диапазон значений, а не строго N микросекунд.
Для STM32 можно при настройке контроллера прерываний задать приоритеты каждому прерыванию. Ну и в перрывании не надо сидеть слишком долго...

Для STM32 вообще все делается на таймере прекрасно: один канал сравнения и второй канал захвата.
Т.е. критичные тайминги формируются аппаратно, а расстояние между битами плюс-минус километр -
можно и в другом прерывании поработать.
Работает гирлянда из 8 датчиков без вопросов.
Проверял один датчик через 200 метров от -30 до 120 C - тоже работает.
Go to the top of the page
 
+Quote Post
firew0rker
сообщение Jul 16 2013, 15:25
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 11-07-12
Из: Новосибирск
Пользователь №: 72 716



Цитата(VAI @ Jul 16 2013, 15:07) *
Вот тут я выкладывал исходники для работы с несколькими DS18B20

Стало интересно разобраться в схеме опторазвязки.
Не понимаю зачем оптопара. X15.T_Data связан с выходом гальванически по цепи R77,R74,выв.3,4 D15.
Go to the top of the page
 
+Quote Post
VAI
сообщение Jul 16 2013, 16:45
Сообщение #12


Профессионал
*****

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



Точка соединения R77, R74 - это питание.


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
sidy
сообщение Jul 16 2013, 17:05
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 280
Регистрация: 2-11-08
Пользователь №: 41 333



У меня вопрос близкий к данной теме, по таймерам STM32. Есть один низкочастотный таймер в котором укладывается 100 полных повторений высокочастотного таймера. По переполнению НЧ таймер останавливается, и производятся некоторые расчеты, а ВЧ таймер прожолжает считать. Записав значение счетного регистра ВЧ таймера сразу после прерывания и после окончания расчетов в переменные я хочу вычислить дельту и компенсировать оставание НЧ таймера перед его повторным запуском. Если это произошло в одном периоде ВЧ таймера, то дельту считать легко, но если это произощло в разных периодах, как показано на рис.,
Прикрепленное изображение

то не понятно как вычислить время между событием 1 и 2.
Go to the top of the page
 
+Quote Post
firew0rker
сообщение Jul 16 2013, 17:07
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 11-07-12
Из: Новосибирск
Пользователь №: 72 716



Цитата(VAI @ Jul 16 2013, 23:45) *
Точка соединения R77, R74 - это питание.

Один источник питания для МК и датчика?
Go to the top of the page
 
+Quote Post
VAI
сообщение Jul 16 2013, 17:18
Сообщение #15


Профессионал
*****

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



Цитата(firew0rker @ Jul 16 2013, 21:07) *
Один источник питания для МК и датчика?

В данном варианте - да.


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th June 2025 - 22:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01516 секунд с 7
ELECTRONIX ©2004-2016