Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: 1-wire интерфейс
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Connor
Хочу реализовать 1 wire интерфейс для общения между stm32f303ve и температурным датчиком ds1821,но есть такая проблема, я работаю на 1Мгц (HCLK) и у меня не получается сделать точную задержку времени, что для 1wire весьма критично, ведь он завязан на таймингах.

Может кто-нибудь подсказать как можно реализовать точную задержку, скажем, в 1 микросекунду и возможно ли это реализовать на stm на такой частоте ядра? Дело ещё в том, что когда мы подаём сигнал на какую-то ножку, также необходимо время пока сигнал достигнет нужный величины (Vdd, к примеру),судя по даташиту оно должно быть около 125 НАНОсекунд на частоте в 2Мгц, но как я не пытался время задержки у меня получается минимально около 50мкс с помощью DWT, что очень много, буду рад вашим мыслям и советам, спасибо
mantech
Это будет очень проблематично, учитывая, что там есть задержки в 5мксек. В данном случае, думаю стоит посмотреть в сторону УАРТА...
Forger
Цитата(Connor @ Mar 30 2018, 20:08) *
stm32f303ve .... работаю на 1Мгц (HCLK)

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


Нажмите для просмотра прикрепленного файла
Connor
да гуглил я гуглил!))ничего толкового не нашёл для себя, из реализации задержек в мкс в основом только DWT, а рабочий пример что я видел для one wire был на 72МГц
kolobok0
Цитата(Connor @ Mar 30 2018, 20:08) *
Хочу реализовать 1 wire ..., в 1 микросекунду...Дело ещё в том,......


1) Если внимательно присмотритесь к данному протоколу, то станет понятно что там нет 1мкс... Да сигнал Вы должны снимать(лог, 0) в каждом слоте передачи.
Но протокол сделан так, что ничего страшного не произойдёт если там скажем будет не 1 мкс, а 2 или 3..
2) По поводу распространения сигнала - когда реализуете сами задержки выбросите из головы. Сосредоточьтесь ТОЛЬКО на соблюдения даташита в таймингах. Очень критично именно стробирование
слота и дальнейшее чтение или удержание линии необходимое кол-во мкс.
3) есть различные реализации данной задачи. есть последовательный порт, есть ногодрыг, есть пдп. Всё тут не раз обсуждалось - если покопаться внимательно, найти можно.
4) Почему ds1821 (хоть я и сторонник их юзанья в пром. изготовлении для регулировки...)? Он выпадает из общего ряда 1Wire протокола. Он НЕ!!! имеет адресацию на шине (отсюда один порт = один датчик.
Что лично по мне упрощает пусконаладку и ремонт конечного изделия на объекте = меньше отвёрточно-настроечной потери времени). Есть и плюсы - он даёт разрешение температуры до 0,01 градуса (обычные DS18xx только 0,0625 градуса).
5) Не забывайте защиту от статики.
6) Если линии длинные (более 50 метров) - рекомендую перенести нагрузочный резистор ближе к датчику и уменьшить его до сотен ом где-то..

с уважением
(круглый)
Forger
Цитата(Connor @ Mar 30 2018, 21:44) *
да гуглил я гуглил!))ничего толкового не нашёл для себя,

Тогда существует лишь одно верное решение этой "проблемы": заказать реализацию проекта целиком. Разумеется, за не просто так.
Connor
Цитата(kolobok0 @ Mar 30 2018, 12:44) *


Спасибо, я понимаю, но у меня даже не получается сделать задержку кратной 5 мкс или 15, и на сколько я помню разрешение у него 8бит, а это 1 градус в диапазоне от -55 до +170 что ли или около того. Мне, при решении данной задачи, стало интересно именно реализация задержки, ведь на 1МГц один клок это 1мкс, один такт, в принципе теоретически такая задержка возможна...
domowoj
А какой смысл использовать этот кристалл СТМ на такой низкой частоте?
Connor
Цитата(domowoj @ Mar 30 2018, 13:20) *
А какой смысл использовать этот кристалл СТМ на такой низкой частоте?


На плате много других устройств, которые работают на более высокой частоте и расположены они очень близко, и был уже негативный опыт частотных искажений в связи с работой стм на близкой частоте
domowoj
Используйте для внешнего тактирования СТМ одну из ваших высоких частот, пусть работают синхронно.
Forger
Цитата(Connor @ Mar 30 2018, 22:28) *
Хочу реализовать 1 wire интерфейс ..... На плате много других устройств, которые работают на более высокой частоте и расположены они очень близко

(С) Чем дальше в лес ...
jcxz
Цитата(Forger @ Mar 30 2018, 22:37) *
(С) Чем дальше в лес ...

...тем ближе вылез biggrin.gif
Пожалуй исходя из озвученного - сообщение N6 будет в точку. laughing.gif
Connor
Ладно, ребят, тему можно закрывать, всем данке шон
domowoj
Ну нет, как-то нужно с этим бороться,
ну разделите питания, с землями поработайте,
как же люди в быстродействующих АЦП эти вопросы решают.
А решение понизить частоту- решение в лоб,
это не наш метод!
jcxz
Цитата(domowoj @ Mar 30 2018, 22:53) *
ну разделите питания, с землями поработайте,
как же люди в быстродействующих АЦП эти вопросы решают.
А решение понизить частоту- решение в лоб,

Если это сделано по такой причине, то это не решение, а перекладывание с больной головы (схемотехнической) на здоровую (программистскую).
Могу предположить, что схемотехник в конторе ТС-а, имеет бОльший авторитет, чем автор и давит своим авторитетом, заставляя принимать решения в свою пользу biggrin.gif
kolobok0
Цитата(Connor @ Mar 30 2018, 22:04) *
...разрешение у него 8бит, а это 1 градус в диапазоне от -55 до +170...


там есть формула расчёта повышенного разрешения. приходит помимо температуры ышо два числа (одни из них для НЕ 21 всегда конст - отсюда и ограничение в 0,0625 градуса. а вот для 21 - оба меняются) - отсюда и получается 0,01.
ну или по другому. я знаю как. могу за супер-пупер деньги сделать разрешение в 0,01 градуса (не софтово).

по поводу задержки. Вы явно не смотрите в даташит на протокол. Изжовано уже не один десяток человек. чесслово.. у самого за плечами пром. реализация и на 51 и на авр и на стм32 - да пофигу в принципе...
совет дня - найдите две команды. Одна выставляет нуль, вторая снимает. поставте рядом друг с другом . обеспечьте неразрывность этих операций. всё...ваша задача решена... в чём проблема то?
и ышо один совет дня. обратите внимание на временной слот чтения. на его минимальную задержку. Это и есть крайнее значение джитера (и оно, по памяти, около 6 мкс). а то к которому надо стремиться - 1мкс...
получается от 1мкс до 5мкс - вы вы можете немного сдрейфить. Да, чем менее точно - тем короче линия получится..
кстати, надеюсь Вы НЕ!!! используете внутренние подтягивающие резисторы??? Это распространённая ошибка..

удачи вам
(круглый)
PS
ПОВАНГУЮ...

Цитата(Connor @ Mar 30 2018, 22:04) *
... у меня даже не получается сделать задержку кратной 5 мкс или 15...

Вы пытаетесь на прерывании ловить джитер микросекунд... оно?
Ышо раз - взгляните на протокол...Там НЕТ такой необходимости от слова СОВСЕМ!!!
1) между слотами - дрейф в десятки! микросекунд - без проблем...
2) между фазами тестирования(на чтении) - десятки!!! микросекунд - без проблем...

есть только! 1мкс при НАЧАЛЕ слота чтения или записи. ВСЁ!!!

Jury093
Цитата(Connor @ Mar 30 2018, 22:28) *
На плате много других устройств, которые работают на более высокой частоте и расположены они очень близко, и был уже негативный опыт частотных искажений в связи с работой стм на близкой частоте

с такими проблемами вам проще вынести обработку w1 на отдельный чип, например
https://www.chipdip.ru/product/ds2482s-100-2
там есть с 1 линией и до 8-ми..
или сделать самописный бридж, хоть из атмеги или другого подручного mcu
иначе ваша stm32 только и будет, что потеть, обрабатывая тайминги для w1
Forger
Цитата(Jury093 @ Mar 31 2018, 12:41) *
с такими проблемами

Тут "проблемы" совсем другого характера: smile3046.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.