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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> 1-Wire без программных задержек, реализация 1-WIRE без программных задержек
Михаил3
сообщение Dec 17 2014, 10:48
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 1-11-07
Из: киев
Пользователь №: 31 963



Всем Доброго времени суток!
Нужна помощь в реализации обмена с датчиком температуры DS18B20 без использования конструкций типа:
while (480 мкс) {ничего не делать};
есть таймер, двунаправленный порт с открытым коллектором, контроллер прерываний и проц 51 с тактовой 32 Мгц.
Вопрос: что со всем этим делать)))?
Go to the top of the page
 
+Quote Post
megajohn
сообщение Dec 17 2014, 11:06
Сообщение #2


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

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



а UARTа лишнего нет ?
А то можно и на нем
eng
rus


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Dec 17 2014, 11:06
Сообщение #3


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



http://we.easyelectronics.ru/STM32/stm32-1-wire-dma.html

..вот тут борются с 1wire c помощью USARTa .
Соответственно никаких задержек нет.


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Dec 17 2014, 11:10
Сообщение #4


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Lmx2315 @ Dec 17 2014, 15:06) *
..вот тут борются с 1wire c помощью USARTa .
Соответственно никаких задержек нет.

Это для формирования тайм-слота.
А вопрос был про пресенс импульс. Хотя с ним как раз проблем нет, допуски достаточно большие. Можно тупо поллить флаг таймера в основном цикле


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 17 2014, 11:14
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Михаил3 @ Dec 17 2014, 12:48) *
есть таймер...
Вопрос: что со всем этим делать)))?
Если в лоб - конечный автомат в прерывании таймера. Альтернативы - УАПП + конечный автомат в прерывании, УАПП + ПДП, SPI + конечный автомат в прерывании, SPI + ПДП или таймер + ПДП.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Михаил3
сообщение Dec 17 2014, 12:06
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 1-11-07
Из: киев
Пользователь №: 31 963



Цитата(Сергей Борщ @ Dec 17 2014, 13:14) *
Если в лоб - конечный автомат в прерывании таймера. Альтернативы - УАПП + конечный автомат в прерывании, УАПП + ПДП, SPI + конечный автомат в прерывании, SPI + ПДП или таймер + ПДП.

таймер+ПДП очень итересно! подробнее можно? вариант с УАПП и СПИ не очень, требует аппаратной реализации 1-wire. хотелось обойтись 1-м выводом SOC.

Цитата(MrYuran @ Dec 17 2014, 13:10) *
Это для формирования тайм-слота.
А вопрос был про пресенс импульс. Хотя с ним как раз проблем нет, допуски достаточно большие. Можно тупо поллить флаг таймера в основном цикле

проблема как раз в словах "цикле" система заодно выполняет z-stack, так что никаких циклов опроса флага таймера!
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 17 2014, 13:12
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Михаил3 @ Dec 17 2014, 14:06) *
таймер+ПДП очень итересно! подробнее можно?
Также, как по ссылке Lmx2315, только выводимые отсчеты при помощи одного канала DMA выводятся не в УАПП, а в порт по сигналам таймера и вторым каналом DMA считываются обратно не с УАПП, а с этого порта в память. После окончания обмена анализ считанных отсчетов. У x51 вроде была отраженная на порты бит-адресуемая область памяти? На 48 МГц STM32 я делал подобным образом через ноги трех портов одновременный ввод и вывод нескольких каналов ARINC-429 на 100 кБит.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
_pv
сообщение Dec 17 2014, 13:32
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



это еще надо чтобы ДМА было, а то у МК на 51 ядре обычно не так богато с периферией как у stm32.
Go to the top of the page
 
+Quote Post
Михаил3
сообщение Dec 17 2014, 13:52
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 1-11-07
Из: киев
Пользователь №: 31 963



Цитата(_pv @ Dec 17 2014, 15:32) *
это еще надо чтобы ДМА было, а то у МК на 51 ядре обычно не так богато с периферией как у stm32.

ДМА есть штук 5 и таймеров 3. это CC2530

Цитата(Сергей Борщ @ Dec 17 2014, 15:12) *
Также, как по ссылке Lmx2315, только выводимые отсчеты при помощи одного канала DMA выводятся не в УАПП, а в порт по сигналам таймера и вторым каналом DMA считываются обратно не с УАПП, а с этого порта в память. После окончания обмена анализ считанных отсчетов. У x51 вроде была отраженная на порты бит-адресуемая область памяти? На 48 МГц STM32 я делал подобным образом через ноги трех портов одновременный ввод и вывод нескольких каналов ARINC-429 на 100 кБит.

Спасибо, попробую разобраться как это происходит и где менять режимы таймера посоветуете?

Там есть возможность подключить к порту выход таймера и менять счетчик по ПДП, также есть режим захвата у таймера. можно переключать. только как определять моменты переключений???
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 17 2014, 14:28
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Михаил3 @ Dec 17 2014, 15:52) *
Там есть возможность подключить к порту выход таймера и менять счетчик по ПДП, также есть режим захвата у таймера. можно переключать. только как определять моменты переключений???
Такой вариант думайте сами. Я предлагал несколько другое - забиваем в память массив 111100111100..... и выдаем его в порт по таймеру, одновременно читая порт обратно в массив. В конце получим что-то вроде 111100110000... и из этого находим, что датчик отвечал нулем во втором бите. Как-то так.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Dec 18 2014, 01:54
Сообщение #11


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(Михаил3 @ Dec 17 2014, 13:48) *
...51 с тактовой 32 Мгц.Вопрос: что со всем этим делать)))?


программировать, что же ещё то?
Отлично работает на 51 тактовая 24, внутренняя 2мГц. куча датчиков 1wire (практически ограничение - кол-во ног),
сканирование менее секунды, по всем датчикам. ногодрыг. отдельный таймер. конечный автомат с загрузкой адресса перехода при отработке.
если сильно присмотритесь к протоколу - то увидите что точность тайм-аута необходимо выдержать только между синхро импульсом начала слота
на чтении и записи. всё остальное настолько большие интервалы для ваших частот - что без проблем, вместе с ослинными ушами прячется
любой слон.
Go to the top of the page
 
+Quote Post
Михаил3
сообщение Dec 18 2014, 09:04
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 1-11-07
Из: киев
Пользователь №: 31 963



Цитата(kolobok0 @ Dec 18 2014, 03:54) *
программировать, что же ещё то?
Отлично работает на 51 тактовая 24, внутренняя 2мГц. куча датчиков 1wire (практически ограничение - кол-во ног),
сканирование менее секунды, по всем датчикам. ногодрыг. отдельный таймер. конечный автомат с загрузкой адресса перехода при отработке.
если сильно присмотритесь к протоколу - то увидите что точность тайм-аута необходимо выдержать только между синхро импульсом начала слота
на чтении и записи. всё остальное настолько большие интервалы для ваших частот - что без проблем, вместе с ослинными ушами прячется
любой слон.

слон прячется - носорог вылазит. весь обмен с датчиком нужно запихивать в прерывание или ПДП. по ПДП не очень понятно как дергать одной ногой, а не всеми (порт 8 ног в разном состоянии вход-выход)
конечный автомат в прерывании по таймеру для меня пока сложноосмысливаемая штука... таймслот стека 320 мкс короче одного сброса датчика - 480.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Dec 18 2014, 17:55
Сообщение #13


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(Михаил3 @ Dec 18 2014, 12:04) *
... по ПДП не очень понятно как дергать одной ногой, а не всеми (порт 8 ног в разном состоянии вход-выход)...таймслот стека 320 мкс


1) пдп вроде как должен настраиваться по ножкам конкретно (какие выводятся). согласитесь - пдп с выводом в порт не имел бы смысла,
если бы не имел селективность по конкретным пинам. далее - думаю надо смотреть конкретный МК и конкретные примеры счупать.

2) тайм слот (тот который критичен) это между строб импульс при формировании одного бита. эти величины около 2-6 мкс.
Что при указанных скоростях можно поддержать без труда. а 320 или там 480мс - то уже не принципиальные тайм ауты. т.е.
плюс-минус пару десятков микросекунд - Вас никто не расстреляет. поверьте дураку. дальше рекомендую вкуривать
мануалы по 1Wire и построить рыпку пример для более уверенного понимания нижнего уровня. Только финально тестируйте
на длинных кабелях > 20 метров. тайм-ауты выпрямите получше. с осцилом завалы видны хорошо в линии. так-же рекомендую
потестировать с помощью рашпель-метода постановки помех. так-же софт отшлифуете. в боевом варианте у вас потом будет как танк
по пром зонам и на десятки метров...
Go to the top of the page
 
+Quote Post
Михаил3
сообщение Dec 18 2014, 18:30
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 1-11-07
Из: киев
Пользователь №: 31 963



Цитата(kolobok0 @ Dec 18 2014, 19:55) *
1) пдп вроде как должен настраиваться по ножкам конкретно (какие выводятся). согласитесь - пдп с выводом в порт не имел бы смысла,
если бы не имел селективность по конкретным пинам. далее - думаю надо смотреть конкретный МК и конкретные примеры счупать.

2) тайм слот (тот который критичен) это между строб импульс при формировании одного бита. эти величины около 2-6 мкс.
Что при указанных скоростях можно поддержать без труда. а 320 или там 480мс - то уже не принципиальные тайм ауты. т.е.
плюс-минус пару десятков микросекунд - Вас никто не расстреляет. поверьте дураку. дальше рекомендую вкуривать
мануалы по 1Wire и построить рыпку пример для более уверенного понимания нижнего уровня. Только финально тестируйте
на длинных кабелях > 20 метров. тайм-ауты выпрямите получше. с осцилом завалы видны хорошо в линии. так-же рекомендую
потестировать с помощью рашпель-метода постановки помех. так-же софт отшлифуете. в боевом варианте у вас потом будет как танк
по пром зонам и на десятки метров...

длинные линии, помехи, осциллографы как для человека с радиотехническим образованием (меня) совершенно родные вещи, а датчик планируется для измеренияя температуры в домике в деревне как внутри так и снаружи, по результатам управляем теплым полом и электроотоплением (зима на дворе). максимальная длина шлейфа датчиков - метра полтора. остальное принял к исполнению.. изучаю нижний уровень. спасибо
Go to the top of the page
 
+Quote Post
Мур
сообщение May 11 2015, 14:44
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Ребята!
Нигде не могу найти информацию об очередности передачи бит. Старшими вперед или младшими идет передача\прием?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 27th July 2025 - 14:33
Рейтинг@Mail.ru


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