Поясните как работает схема

nikomp
Offline
Зарегистрирован: 20.06.2014

Добрый день!

Собрал вот такую схему 

http://mirshem.com/scheme/2389_Schityvaem_pokazanij_datchika_ds18b20.html/

хотелось бы понять принци ее работы. Почитал про подтягивающие резисторы, вроде понятно, чтоб убрать шумы. Но как он функционирует в данном примере не совсем понятно.

Поясните пожалуйста для чайника как все это работает?

leshak
Offline
Зарегистрирован: 29.09.2011

Кратко: подтягивающий резистор нужен, что-бы какой-то выход, который "никто не трогает" (никто не подал на него HIGH или LOW) не работал как антена "ловящая помехи". Что-бы у него было какой-то предсказуемое состоняние (в данном случае HIGH).

Что-бы если там, вдруг, обнаружись, все-таки LOW. То это означало, что "кто-то таки умышленного придавил эту линию к GND" (либо контроллер, либо датчик). Вот эти "умышленные придавления" и есть "передаваемая информация".

Подробней тут: AVR. Учебный курс. Устройство и работа портов ввода-вывода | Электроника для всех

 

 

leshak
Offline
Зарегистрирован: 29.09.2011

Если образно.

Представте что у вас между двумя домами натянута "струна". Натягивая пальцем вниз ее - вы передаете морзянкой соседу сообщение.

Что-бы это было возможно, струна должна быть натянута. Вот резистор, в данном случае и есть такое "натяжитель".

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

leshak пишет:

Представте что у вас между двумя домами натянута "струна". Натягивая пальцем вниз ее - вы передаете морзянкой соседу сообщение. Что-бы это было возможно, струна должна быть натянута. Вот резистор, в данном случае и есть такое "натяжитель".

Скорее веревка, провисающая до земли. Тогда резистор - это палка-подпорка, приподнимающая веревку с одной стороны над землей и позволяющая пускать по ней сигналы в виде волн, или, наоборот, прижимающая к земле...

faraddin
Offline
Зарегистрирован: 11.08.2013

Предлогаю выпустить книгу "1001 объяснение работы подтягивающего резистора".

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

leshak
Offline
Зарегистрирован: 29.09.2011

>Предлогаю выпустить книгу "1001 объяснение работы подтягивающего резистора".

Вы знаете, когда я начинал у меня это тоже был один из первых вопросов. И один из самых страшных/сложных. Сам термин "подтягивающий резистор" звучал устрашающе.

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

Вообщем недели две, наверное я искал ответ на этот вопрос.

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Вы - гитарист, и чтобы получать приличный звук на гитаре ее надо настроить - натянуть струны. Вот колковый механизм и есть подтягивающий резистор, но только не перетяните :)

leshak
Offline
Зарегистрирован: 29.09.2011

Ну и еще.... наверное стоит сказать про номинал этого подтягивающего.

Чем больше меньше номинал резистора, тем более сильную помеху он может "задавить" (сильнее подтягивает).
С другой стороны, чем сильнее он подтягивает, тем труднее его "перебороть", тому кто посылает данные в линию. Плюс, в момент придавливания, ток идущий через резистор "расходуется в пустую". Сколько именно - узнаем из по закону Ома I=U/R. При 5-ти вольтах, и скажем 10K резисторе, получаем 5/10000=0,0005A=0,5mA - то есть "мало", такое можно терпеть.

На практике, обычно берут резисторы от 4.7K до 10K. Зависит от длины линии, что рекомендует производитель датчика и т.п. Чаще всего - что оказалось под рукой. Воткнул, работает - и ладно.

Если "ну вообще ничего нет под рукой", то можно включить встроенный в контроллер подтягивающий. Как это делать ВНИМАТЕЛЬНО читаем Функция digitalWrite() | Аппаратная платформа Arduino. А потом еще раз ВНИМАТЕЛЬНО, что-бы включить именно подтягивающий резистор, а не выдать туда HIGH/LOW.

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

 

 

leshak
Offline
Зарегистрирован: 29.09.2011

 Ну и еще обычно если вы читаете, что "data линию нужно подтянуть к питанию резитором", то в случае, скажем 10-ти датчиков на этой линии, подтягивающий резистор должен быть только один. Его 10-ти кратно умножать - не нужно.

Если вы вцепите 10-ть подтягивающих резисторов, скажем на 4.7K, то в результате получите (паралельное подключение резисторов), по сути один резистор на 470 Ом. А это слишком мало для подтягивающего.

nikomp
Offline
Зарегистрирован: 20.06.2014

Спасибо! Вроде как проясняется ситуация.

Ну предположим получил я  "умышленные придавления"("передаваемая информация"), а как она конвертируется в реальные цифры? в температуру? Это происходит в моем скетче?

и еще, в данной схеме есть какая-то разница притягивать к питанию или к земле?

 

leshak
Offline
Зарегистрирован: 29.09.2011

nikomp пишет:

Спасибо! Вроде как проясняется ситуация.

Ну предположим получил я  "умышленные придавления"("передаваемая информация"), а как она конвертируется в реальные цифры? в температуру? Это происходит в моем скетче?

Если используете аппаратный I2C, то в эти "придавления" он будет переводить в в нули и единицы. А нули и единицы собирать в байты. Если программно (сами) будете это делать, не используя аппаратный, то сами должны будете этим заниматься.

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

В случае шины OneWire (на ней работает ds18b20), апаратной варианта у нас нет. Значит только скетч/библиотека должны всем заниматся.

nikomp пишет:

и еще, в данной схеме есть какая-то разница притягивать к питанию или к земле?

А давайте вы сами нагуглите ответите нам на этот вопрос? В случае OneWire какой уровень сигнала (какая напряжение) на Data-линии означает "никто ничего не говорит", а какой "несет смысл"?  В биваете в гугл OneWire, первая же ссылка на википедию, в ней ссылки на описание (в том числе на русском), читаем, складываем картину "как оно работает на физическом уровне". Когда должен быть HIGH, когда LOW.

Ну а потом смотрим, куда же нам нужно подтянуть, к земле или питанию что-бы соотвествовать спецификации протокола. 

renoshnik
Offline
Зарегистрирован: 11.04.2013

nikomp пишет:

Добрый день!

Собрал вот такую схему 

http://mirshem.com/scheme/2389_Schityvaem_pokazanij_datchika_ds18b20.html/

хотелось бы понять принци ее работы. Почитал про подтягивающие резисторы, вроде понятно, чтоб убрать шумы. Но как он функционирует в данном примере не совсем понятно.

Поясните пожалуйста для чайника как все это работает?

 

не понял ... каким ветром вам навеяло вопрос про ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ ??? прошёл по ссылке - никаких ассоциаций с подтягивающими резисторами не возникло ...

 

leshak
Offline
Зарегистрирован: 29.09.2011

renoshnik пишет:

не понял ... каким ветром вам навеяло вопрос про ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ ??? прошёл по ссылке - никаких ассоциаций с подтягивающими резисторами не возникло ...

А зря. Схему видите? Резистор на ней видите?  Каково его предназначение функциональное?

Так что навеяло очень правильно. Увидили резистор, задались вопросом "а нафига он тут?"

nikomp
Offline
Зарегистрирован: 20.06.2014

>>Если используете аппаратный I2C, то в эти "придавления" он будет переводить в в нули и единицы. А нули и единицы собирать в байты.

что такое аппаратный I2C?

Со вторым вопросом попробую сам разобраться, поищу.

P/S/ не сообразил как цитату сделать )

 

leshak
Offline
Зарегистрирован: 29.09.2011

nikomp пишет:

>>Если используете аппаратный I2C, то в эти "придавления" он будет переводить в в нули и единицы. А нули и единицы собирать в байты.

что такое аппаратный I2C?

Ну вообщем-то что такое I2C тоже можно нагуглить (он же TWI в терминологии ATMEL-ла). Это еще одна из популярных шин данных. 

Что такое "аппаратный", думаю можно понять из описания выше. Кто-то должен декодировать все эти пульсации. Этим может заниматся либо скетч/библиотека, либо специальный блок внутри микропроцессора. А программисту выдавать уже "готовые цифры". Будет быстрее, надежней и меньше нагружать этой работой основной процессор.  Это если он есть в камушке. Во всех дуиновых камнях - он есть (но естественно, раз он аппаратный, то работать будет только на конретных ногах, указанных в спецификации).

Точно также и UART бывает аппаратный и програмный.  (он же Serial).

И "контрольный в голову", еще SPI шину будете часто встречать :)

Вообщем, в итоге, иметь представление желательно про UART/OneWire/I2C/SPI шины.

Остальные уже гораздо реже встречающаяся экзотика. UART - самое простое. OneWire/I2C/SPI в чем-то родственны. Если разобратся досконально с одной, то и другие будут более менее понятны.

nikomp
Offline
Зарегистрирован: 20.06.2014

>>Со вторым вопросом попробую сам разобраться, поищу.

http://robocraft.ru/blog/communication/117.html

может пригодится кому

 

leshak
Offline
Зарегистрирован: 29.09.2011

nikomp пишет:

>>Со вторым вопросом попробую сам разобраться, поищу.

http://robocraft.ru/blog/communication/117.html

может пригодится кому

 

Молодец. Только "а где же ответ?". Куда нужно подтягивать? А если наоборот?

nikomp
Offline
Зарегистрирован: 20.06.2014

в тонкости схемы я не вдавался, но сам для себя понял примерно так, что полезная информация передается когда происходит переключение с 1 на ноль, когда выключаем питание. Если смотреть текст по ссылке там написано что, 1-Wire устройство обязательно должно быть подтянуто к питанию, соответственно делаю вывод, что наоборот работать не будет.

leshak
Offline
Зарегистрирован: 29.09.2011

nikomp пишет:

полезная информация передается когда происходит переключение с 1 на ноль

Вот это и есть ответ на ваш вопрос. Вы верно поняли. То что "по ссылке написанно что должно быть к питанию..." это уже вторично. Это результат того что "когда происходит переключения с 1 на ноль". Поэтому нам и нужно обеспечить что-бы "по умолчанию" там была единица.

nikomp
Offline
Зарегистрирован: 20.06.2014

Еще вот тут нашел хорошее описание работы самого скетча 

http://research.andbas.com/2012/02/1-wire-ds18s20.html

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

 

leshak
Offline
Зарегистрирован: 29.09.2011

nikomp пишет:

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

 

1. Это нужно только в образовательных целях. Библиотеки, по крайней мере под этот дачик уже написаны.
2. Посмотреть "как же с ним работать" - можно заглянуть в код тех же бибилиотек.
3. Странно что вы не смогли найти "спецификаций". Уж на кого их не может не быть, так это на ds1820

Вообщем запомните волшебное слово "datasheet". Это и есть "спецификация" по умному. Он же "даташит". Разбирательство с любой железкой - желательно начинать с гугления "ЖЕЛЕЗКА datasheet".

Еще можно погуглить "ЖЕЛЕЗКА Application Notes". Но вот "application notes" это уже для каждой железки производитель пишет. Это, скажем так, рекомендации/примеры использования железки "от производителя" (типовые схемы включения, рекомендуемая обвязка и т.п.).

Иногда "Application Notes" бывает в виде отдельного документа, иногда это просто раздел даташита (как правило в конце). Так что, в любом случае начинать с поиска даташита. Если железка не какаято "китайская экзотика" - даташит найдется ;)

 

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

ещё одна суть подтягивающего резистора к VCC:

выходной каскад датчиков, схем часто выполняется по схеме "окрытый коллектор" ( на базе - сигнал, на эмитере - GND, а коллектор висит в воздухе ). и если напрямик его подсоединить ко входу Ардуины, то ток от ВЫСОКООМНЫХ сопротивлений входных цепей через коллектор-эмитер датчика не даст нужного значения U.

в этом случае нужен резистор в цепь коллектора, и с него же будет сниматься Uсигн на Ардуину, т.е. - подтягивающий резистор к VCC - это причиндал ДАТЧИКА !!!!!

почему его не поставили в датчик ? 

выходной каскад может работать с напряжением 5 .... 10 .... 12 .....24 V, а на каждое напряжение нужен свой внутрикристальный резистор. производитель дал возможность использовать разные напряжения, но коллекторный резистор каждый должен рассчитать сам, под свою используемую напругу.

VCC - резистор - вхАрдуины - ток не будет большим не зависимо от номинала, ибо входные каскады Ардуины имеют мегаОмы ( это закон - чем выше вхСопротивление и ниже выхСопротивление - тем лучше ). 

подсоединяем датчик - с датчика "1" - тока через подтягивающий резистор не будет протекать в коллектор, ток пойдёт VCC - резистор - вхАрдуины ( это наноамперы ), если датчик выдаёт "0" - то тут всё решает подтРезистор. ток потечёт VCC - резистор - ДатчКоллектор - ДатчЭмитер - GND. 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

подтягивающий к земле имеет смысл только в схемах типа VCC - разомкнКнопка - вхАрдуино. если разомкнута ( Z-состояние на выходе кнопки и вход Ардуино=антенна ). вот резистором и устраняется неоднозначность при разомкнутой кнопке, т.е. - через резистор на землю потечёт ток от входных каскадов Ардуины - она это воспримет как примерно 0. при замкнутой кнопке будет два тока - 1 VCC - замкнКнопка - входные цепи Ардуино - земля ( Ардуина это воспримет как примерно 5 ), 2 - VCC - замкнКнопка - подтРезGND - земля. в первой ветке - наноАмперы, во второй - миллиАмперы.... а может и 5 А , если резистор 1 Ом и блок питания с этим справится :)

 

будет время - нарисую эквивалентную схему цепей выходного каскада + входные цепи Ардуино - очень наглядно для понимания :)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Q1 - датчик, R_VCC, ( R1, R2, Q2 )=Ардуина

если датчик отсоединить то ток через параллельные R3 и R1 ограничит последовательный с ним R2.

с подткGND - ток через параллельные R3 и R1 ограничит последовательный с ним R1

.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

ещё, когда датчик отключен:

R_VCC при уменьшении номинала будет всё сильнее смещать базу вхТранзАрдуины к VСС ( и выше TTL уровня "1" )

R_GND при уменьшении номинала будет всё сильнее смещать базу вхТранзАрдуины к GND ( и ниже TTL уровня "1" )

 

...но на токи потребления это сильно не отразится