Небольшой вопрос по 1wire

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Первый раз сказал Мяу!
Сообщения: 34
Зарегистрирован: Вс авг 21, 2016 19:53:33

Сообщение Catdawr »

Здравствуйте друзья! Сижу вот разбираюсь с интерфейсом 1wire, всё бы вроде понятно, Тайм-слоты, команды ROM... переводя шину в низкое или высокое мы отправляем или получаем "0" или "1" ( посредством тех же тайм-слотов). Но я вот что не понимаю, как мы программно ( для AVR в C) реализовываем высокое и низкое состояние, если высокое состояние логической "1" от МК тут приводит к ... :
"Внимание: ни ведущий, ни ведомые не выставляют на шине "единицу" - это чревато коротким замыканием: если одно устройство выставит на шине "1", а другое – "0"; поэтому как ведущий, так и ведомый могут использовать только два состояния: "на выход в ноль" и "z-состояние" (на вход без подтяжки). Подтяжка к питанию осуществляется резистором (!)."
(цитата из http://avr.ru/beginer/understand/1wire )

Что тут получается? логическая "1" приводит к нехорошему. Нигде такие банальности не расписаны( хотя я и сам, почему то, чувствую, что вопрос глупый) и.. ну не понимаю я в общем, прошу помощи.
Реклама
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1315
Зарегистрирован: Пт ноя 27, 2009 19:47:13
Откуда: Казань

Сообщение НАПАЛМ »

Линия 1-wire должна быть подтянута к питанию через резистор 4.7кОм. Т.е. при z-состоянии ведущего/ведомого на линии устанавливается логическая 1. А при выходе на ноль ведущего/ведомого ток будет течь через тот самый подтягивающий резистор.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Пускай у Вас подключен 1-wire к PB0.
Условно назовем нулевой бит регистра PORTB - PORTB.0. И аналогично DDRB.0.

PORTB.0 всегда равен 0
Если Вам надо передать 1 или слушаете ответ,то DDRB.0=0.
Если нужно установить 0 то DDRB.0=1
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Первый раз сказал Мяу!
Сообщения: 34
Зарегистрирован: Вс авг 21, 2016 19:53:33

Сообщение Catdawr »

Спасибо друзья, но тут вот...
http://datagor.ru/microcontrollers/micr ... 18b20.html
... в программе PORTB не всегда =0, он меняет свое значение, значит как то используется.
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 15696
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

AN244.PDF
(222.94 КБ) 389 скачиваний
может поможет...
:dont_know:
Реклама
Первый раз сказал Мяу!
Сообщения: 34
Зарегистрирован: Вс авг 21, 2016 19:53:33

Сообщение Catdawr »

Что-то не очень :( Да я уже и в чужих библиотеках искал, концы ведущие к нужным функциям тонут в безднах библиотеки. Смотрел даже их фирменную (ну или переделку их фирменной, а может даже обе) там черти ноги сломят ( ну такие, вроде меня)...
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

По скольку Ваша тема была перенесена, Вам бы следовало обозначить на каком МК делать будете.

Я чужой пример, указанный Вами рассматривать не хочу, и там еще схемы нет.

Если Вы PORTу назначите 1, и одновременно DDR тоже1 в тот момент, когда устройства на шине пытаются шину подтянуть к нулю, возникнет КЗ.
Почитайте, в том числе, физическую часть протокола. Линию в состоянии высокого уровня должен держать только подтягивающий резистор, исключение только в режиме паразитного питания датчика.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Первый раз сказал Мяу!
Сообщения: 34
Зарегистрирован: Вс авг 21, 2016 19:53:33

Сообщение Catdawr »

Простите, ну допустим attiny2313( я выше указывал, что на AVR и на С)... мне ж пока просто разобраться, на, хоть каком, примере. Читаю , что попадается ну и... тут вот, что-то не сходится с вашими словами, вот и попросил пояснить . (Я там, по-моему, вижу моменты где и PORT=1 и DDR =1)
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Примеры работы, принципы, протокол, физика и прочее, расписано в инете еще 10 лет назад и на 20 лет вперед. Если Вы не хотите читать, в том числе что Вам тут отвечают, то как Вам помочь?
Читайте, читайте и читайте.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Прорезались зубы
Аватара пользователя
Сообщения: 240
Зарегистрирован: Пн июл 04, 2016 16:51:22
Откуда: Россия, Омск

Сообщение AlanDrakes »

1. На шине всегда должен быть резистор к питанию. Можно обойтись дёрганьем ноги контроллера между режимами Выхода и Входа с подтяжкой (сам так выкручивался - всё работает).
2. Если хотите отправить - переводите порт на ВЫХОД и дёргаете пин вниз на нужное время. По истечении оного - переводите пин на ВХОД (можно вернуть 1 на "выход" - будет подтягивать к питанию где-то через 5-10кОм внутренних).
3. Если считать - точно так же. Переводите пин на ВЫХОД, дёргаете в 0, после 3мкс переводите на ВХОД и подаёте в порт 1 (подтяжка), затем через ещё 8-10мкс считываете состояние пина.
Как бы... Сам так делал - всё работает.
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку

Сообщение Zhuk72 »

1. Шина притянута к плюсу через резистор.
2. Пин МК всегда должен быть настроен на вход.
3. Учитывая 1 и 2 пункты, на шине всегда поддерживается единица.
4. Если контроллер хочет выставить на шину 0, то настраиваете пин на выход, и выставляете на нем 0.
5. После того, как выдержали в нуле нужное время, переключаете пин на вход. Шина сама поднимется в единицу.

Вот так и регулируете. Для выдачи единицы, порт настраиваете на вход, для нуля - на выход с выставлением на ней нуля.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 34
Зарегистрирован: Вс авг 21, 2016 19:53:33

Сообщение Catdawr »

Всё что тут написано я понял, ну и на первоначальный мой вопрос я ответ вас и от Вас получил. Ну в общем спасибо всем... а потом еще отдельное каждому, кто откликнулся. :)
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1486
Зарегистрирован: Вс май 13, 2012 00:01:54

Сообщение Ariadna-on-Line »

Не проще ли поставить на выходе один-единственный NPN транзистор коллектором в шину? И больше никаких абсолютно заморочек.

Только не забываем, инвертировать выходные уровни.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Ariadna-on-Line писал(а):Только не забываем, инвертировать выходные уровни
ну и заодно не забываем, что вывод "в шину" через один порт (на базу транзистора), а ввод - с другого (с коллектора). а так вообще можно. только смысл в чем? схемотехническое усложнение, программно же ничуть не проще... и нафига? :dont_know:
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Если уж использовать два вывода, то тогда UART. Наполовину аппаратный протокол получится.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1486
Зарегистрирован: Вс май 13, 2012 00:01:54

Сообщение Ariadna-on-Line »

Ну так ведь топикстартера не программные замороки напрягают, а вероятность аппаратного повреждения системы.
Сгоревший транзистор всяко дешевле сгоревшего проца.
Конечно, если дефицит портов , тогда другое дело.
ПС. Самотест, можно иметь при использовании двух выводов.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Ariadna-on-Line писал(а):Ну так ведь топикстартера не программные замороки напрягают, а вероятность аппаратного повреждения системы.
Сгоревший транзистор всяко дешевле сгоревшего проца.
Конечно, если дефицит портов , тогда другое дело.
ПС. Самотест, можно иметь при использовании двух выводов.
Если в любом участке кода не будет установки соответствующего бита регистра PORTx, то данной коллизии возникнуть не может, даже при ошибках в алгоритме. (конечно же если с питанием все нормально и по остальным пинам каких-нибудь блуждающих токов нет, которые могут привести МК в неопределенное состояние).
ARV писал(а):если уж так сильно переживать об этом, городить надо совсем другую схему - с гальванической развязкой,
А кто об защите гальванической развязки побеспокоится, адмирал И.Ф. Крузенштерн? :)
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1486
Зарегистрирован: Вс май 13, 2012 00:01:54

Сообщение Ariadna-on-Line »

1. С чего бы вдруг сгорать порту работающему на ВВОД? Разве что пробиться от перенапруги.
2. Вы можете быть уверены в СВОЕМ алгоритме. Но где гарантия, что на другом конце шины
не включат ошибочно-спроектированное устройство, про которые мы и толкуем.
Так что пусть уж сгорит транзистор, а не проц.
Первый раз сказал Мяу!
Сообщения: 34
Зарегистрирован: Вс авг 21, 2016 19:53:33

Сообщение Catdawr »

Друзья, раз вы все еще тут, у меня еще небольшой вопрос созрел:
Предположим, на линии находятся 2 датчика . При считывании CRC кодов, когда 1 датчик посылает "1" а другой "0", как МК их(сигналы) различает ...? Просто, как я понял линия в конкретный момент, находится только в 1ом из 2х состояний, а датчики сигналы, как я понял, посылают одновременно.
Ответить

Вернуться в «Периферия»