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

1-Wire без программных задержек

Всем Доброго времени суток!

Нужна помощь в реализации обмена с датчиком температуры DS18B20 без использования конструкций типа:

while (480 мкс) {ничего не делать};

есть таймер, двунаправленный порт с открытым коллектором, контроллер прерываний и проц 51 с тактовой 32 Мгц.

Вопрос: что со всем этим делать)))?

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


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

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

 

..вот тут борются с 1wire c помощью USARTa .

Соответственно никаких задержек нет.

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


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

..вот тут борются с 1wire c помощью USARTa .

Соответственно никаких задержек нет.

Это для формирования тайм-слота.

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

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


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

есть таймер...

Вопрос: что со всем этим делать)))?

Если в лоб - конечный автомат в прерывании таймера. Альтернативы - УАПП + конечный автомат в прерывании, УАПП + ПДП, SPI + конечный автомат в прерывании, SPI + ПДП или таймер + ПДП.

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


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

Если в лоб - конечный автомат в прерывании таймера. Альтернативы - УАПП + конечный автомат в прерывании, УАПП + ПДП, SPI + конечный автомат в прерывании, SPI + ПДП или таймер + ПДП.

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

 

Это для формирования тайм-слота.

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

проблема как раз в словах "цикле" система заодно выполняет z-stack, так что никаких циклов опроса флага таймера!

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


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

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

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


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

это еще надо чтобы ДМА было, а то у МК на 51 ядре обычно не так богато с периферией как у stm32.

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


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

это еще надо чтобы ДМА было, а то у МК на 51 ядре обычно не так богато с периферией как у stm32.

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

 

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

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

 

Там есть возможность подключить к порту выход таймера и менять счетчик по ПДП, также есть режим захвата у таймера. можно переключать. только как определять моменты переключений???

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


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

Там есть возможность подключить к порту выход таймера и менять счетчик по ПДП, также есть режим захвата у таймера. можно переключать. только как определять моменты переключений???
Такой вариант думайте сами. Я предлагал несколько другое - забиваем в память массив 111100111100..... и выдаем его в порт по таймеру, одновременно читая порт обратно в массив. В конце получим что-то вроде 111100110000... и из этого находим, что датчик отвечал нулем во втором бите. Как-то так.

 

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


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

...51 с тактовой 32 Мгц.Вопрос: что со всем этим делать)))?

 

программировать, что же ещё то?

Отлично работает на 51 тактовая 24, внутренняя 2мГц. куча датчиков 1wire (практически ограничение - кол-во ног),

сканирование менее секунды, по всем датчикам. ногодрыг. отдельный таймер. конечный автомат с загрузкой адресса перехода при отработке.

если сильно присмотритесь к протоколу - то увидите что точность тайм-аута необходимо выдержать только между синхро импульсом начала слота

на чтении и записи. всё остальное настолько большие интервалы для ваших частот - что без проблем, вместе с ослинными ушами прячется

любой слон.

 

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


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

программировать, что же ещё то?

Отлично работает на 51 тактовая 24, внутренняя 2мГц. куча датчиков 1wire (практически ограничение - кол-во ног),

сканирование менее секунды, по всем датчикам. ногодрыг. отдельный таймер. конечный автомат с загрузкой адресса перехода при отработке.

если сильно присмотритесь к протоколу - то увидите что точность тайм-аута необходимо выдержать только между синхро импульсом начала слота

на чтении и записи. всё остальное настолько большие интервалы для ваших частот - что без проблем, вместе с ослинными ушами прячется

любой слон.

слон прячется - носорог вылазит. весь обмен с датчиком нужно запихивать в прерывание или ПДП. по ПДП не очень понятно как дергать одной ногой, а не всеми (порт 8 ног в разном состоянии вход-выход)

конечный автомат в прерывании по таймеру для меня пока сложноосмысливаемая штука... таймслот стека 320 мкс короче одного сброса датчика - 480.

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


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

... по ПДП не очень понятно как дергать одной ногой, а не всеми (порт 8 ног в разном состоянии вход-выход)...таймслот стека 320 мкс

 

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

если бы не имел селективность по конкретным пинам. далее - думаю надо смотреть конкретный МК и конкретные примеры счупать.

 

2) тайм слот (тот который критичен) это между строб импульс при формировании одного бита. эти величины около 2-6 мкс.

Что при указанных скоростях можно поддержать без труда. а 320 или там 480мс - то уже не принципиальные тайм ауты. т.е.

плюс-минус пару десятков микросекунд - Вас никто не расстреляет. поверьте дураку. дальше рекомендую вкуривать

мануалы по 1Wire и построить рыпку пример для более уверенного понимания нижнего уровня. Только финально тестируйте

на длинных кабелях > 20 метров. тайм-ауты выпрямите получше. с осцилом завалы видны хорошо в линии. так-же рекомендую

потестировать с помощью рашпель-метода постановки помех. так-же софт отшлифуете. в боевом варианте у вас потом будет как танк

по пром зонам и на десятки метров...

 

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


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

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

если бы не имел селективность по конкретным пинам. далее - думаю надо смотреть конкретный МК и конкретные примеры счупать.

 

2) тайм слот (тот который критичен) это между строб импульс при формировании одного бита. эти величины около 2-6 мкс.

Что при указанных скоростях можно поддержать без труда. а 320 или там 480мс - то уже не принципиальные тайм ауты. т.е.

плюс-минус пару десятков микросекунд - Вас никто не расстреляет. поверьте дураку. дальше рекомендую вкуривать

мануалы по 1Wire и построить рыпку пример для более уверенного понимания нижнего уровня. Только финально тестируйте

на длинных кабелях > 20 метров. тайм-ауты выпрямите получше. с осцилом завалы видны хорошо в линии. так-же рекомендую

потестировать с помощью рашпель-метода постановки помех. так-же софт отшлифуете. в боевом варианте у вас потом будет как танк

по пром зонам и на десятки метров...

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

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


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

Ребята!

Нигде не могу найти информацию об очередности передачи бит. Старшими вперед или младшими идет передача\прием?

 

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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