Поясните как работает схема
- Войдите на сайт для отправки комментариев
Ср, 25/06/2014 - 16:34
Добрый день!
Собрал вот такую схему
http://mirshem.com/scheme/2389_Schityvaem_pokazanij_datchika_ds18b20.html/
хотелось бы понять принци ее работы. Почитал про подтягивающие резисторы, вроде понятно, чтоб убрать шумы. Но как он функционирует в данном примере не совсем понятно.
Поясните пожалуйста для чайника как все это работает?
Кратко: подтягивающий резистор нужен, что-бы какой-то выход, который "никто не трогает" (никто не подал на него HIGH или LOW) не работал как антена "ловящая помехи". Что-бы у него было какой-то предсказуемое состоняние (в данном случае HIGH).
Что-бы если там, вдруг, обнаружись, все-таки LOW. То это означало, что "кто-то таки умышленного придавил эту линию к GND" (либо контроллер, либо датчик). Вот эти "умышленные придавления" и есть "передаваемая информация".
Подробней тут: AVR. Учебный курс. Устройство и работа портов ввода-вывода | Электроника для всех
Если образно.
Представте что у вас между двумя домами натянута "струна". Натягивая пальцем вниз ее - вы передаете морзянкой соседу сообщение.
Что-бы это было возможно, струна должна быть натянута. Вот резистор, в данном случае и есть такое "натяжитель".
Представте что у вас между двумя домами натянута "струна". Натягивая пальцем вниз ее - вы передаете морзянкой соседу сообщение. Что-бы это было возможно, струна должна быть натянута. Вот резистор, в данном случае и есть такое "натяжитель".
Скорее веревка, провисающая до земли. Тогда резистор - это палка-подпорка, приподнимающая веревку с одной стороны над землей и позволяющая пускать по ней сигналы в виде волн, или, наоборот, прижимающая к земле...
Предлогаю выпустить книгу "1001 объяснение работы подтягивающего резистора".
Вот мое объяснение. У вас есть бассейн, и вам нужно чтобы было 2 состояния - бассейн полон или бассейн пуст. Но вот незадача, бассейн находится под открытым небом и в него попадает дождевая вода (шум). Что вы делаете, вы делаете небольшую дырочку в дне бассейна, которой достаточно что бы дождевая вода стекала (подтягивающий к земле резистор) и бассейн пустой (ноль), а когда вам надо его наполнить вы открываете очень большой кран, через который вода поступает гораздо быстрее чем вытекает из бассейна) (и бассейн становится полон (еденица). Да, через маленькую дырочку вода будет постоянно утекать, это есть ток утечки, и чем слабее резистор (больше дырка) у вас тем ток утечки (расход воды) больше.
>Предлогаю выпустить книгу "1001 объяснение работы подтягивающего резистора".
Вы знаете, когда я начинал у меня это тоже был один из первых вопросов. И один из самых страшных/сложных. Сам термин "подтягивающий резистор" звучал устрашающе.
И вот не знаю почему, но когда я спрашивал знакомых. Один всякие усилители, схемки на 555 микрухе с детства делает, второй работает в том что собирает настраивает некое устройство практически серийно (вообщем как-бы тоже "в схема шарит"), но... вот почему-то оба эти "схемотехника" смотрели на меня круглыми глазами и говорили "фиг его знает что это такое, мы в микроконтроллерах не шарим". И когда пытался нагуглить, то везде, блин, подразумевалось что это очевидная и всем известная вещь. Везде только что-то типа "поставь подтягивающий", "поставил подтягивающий и все стало хорошо...". А зарываться в какой-нибудь трехтомник "Искуство схемотехники..." - не хотелось :)
Вообщем недели две, наверное я искал ответ на этот вопрос.
Вы - гитарист, и чтобы получать приличный звук на гитаре ее надо настроить - натянуть струны. Вот колковый механизм и есть подтягивающий резистор, но только не перетяните :)
Ну и еще.... наверное стоит сказать про номинал этого подтягивающего.
Чем больше меньше номинал резистора, тем более сильную помеху он может "задавить" (сильнее подтягивает).
С другой стороны, чем сильнее он подтягивает, тем труднее его "перебороть", тому кто посылает данные в линию. Плюс, в момент придавливания, ток идущий через резистор "расходуется в пустую". Сколько именно - узнаем из по закону Ома I=U/R. При 5-ти вольтах, и скажем 10K резисторе, получаем 5/10000=0,0005A=0,5mA - то есть "мало", такое можно терпеть.
На практике, обычно берут резисторы от 4.7K до 10K. Зависит от длины линии, что рекомендует производитель датчика и т.п. Чаще всего - что оказалось под рукой. Воткнул, работает - и ладно.
Если "ну вообще ничего нет под рукой", то можно включить встроенный в контроллер подтягивающий. Как это делать ВНИМАТЕЛЬНО читаем Функция digitalWrite() | Аппаратная платформа Arduino. А потом еще раз ВНИМАТЕЛЬНО, что-бы включить именно подтягивающий резистор, а не выдать туда HIGH/LOW.
Плюс такого решения: на одну детальку меньше.
Минус: во первых такой резистор может оказаться слишком слабеньким подтягивальщиком (20K номинал у него, кажись), во вторых... если какая-то библиотека этот пин использует то как вход, то как выход... нужно находить момент переключения, и каждый раз, после того как она переключила "на вход" - заново включать подтягивающий.
Ну и еще обычно если вы читаете, что "data линию нужно подтянуть к питанию резитором", то в случае, скажем 10-ти датчиков на этой линии, подтягивающий резистор должен быть только один. Его 10-ти кратно умножать - не нужно.
Если вы вцепите 10-ть подтягивающих резисторов, скажем на 4.7K, то в результате получите (паралельное подключение резисторов), по сути один резистор на 470 Ом. А это слишком мало для подтягивающего.
Спасибо! Вроде как проясняется ситуация.
Ну предположим получил я "умышленные придавления"("передаваемая информация"), а как она конвертируется в реальные цифры? в температуру? Это происходит в моем скетче?
и еще, в данной схеме есть какая-то разница притягивать к питанию или к земле?
Спасибо! Вроде как проясняется ситуация.
Ну предположим получил я "умышленные придавления"("передаваемая информация"), а как она конвертируется в реальные цифры? в температуру? Это происходит в моем скетче?
Если используете аппаратный I2C, то в эти "придавления" он будет переводить в в нули и единицы. А нули и единицы собирать в байты. Если программно (сами) будете это делать, не используя аппаратный, то сами должны будете этим заниматься.
А дальше, в любом случае эти пришедшие байты осмысливать - задача вашего скетча. Опять-таки либо "сам", либо искать готовую библиотеку (которая суть - кусочек скетча, просто его кто-то уже написал и пределал ему удобную ручку).
В случае шины OneWire (на ней работает ds18b20), апаратной варианта у нас нет. Значит только скетч/библиотека должны всем заниматся.
и еще, в данной схеме есть какая-то разница притягивать к питанию или к земле?
А давайте вы сами нагуглите ответите нам на этот вопрос? В случае OneWire какой уровень сигнала (какая напряжение) на Data-линии означает "никто ничего не говорит", а какой "несет смысл"? В биваете в гугл OneWire, первая же ссылка на википедию, в ней ссылки на описание (в том числе на русском), читаем, складываем картину "как оно работает на физическом уровне". Когда должен быть HIGH, когда LOW.
Ну а потом смотрим, куда же нам нужно подтянуть, к земле или питанию что-бы соотвествовать спецификации протокола.
Добрый день!
Собрал вот такую схему
http://mirshem.com/scheme/2389_Schityvaem_pokazanij_datchika_ds18b20.html/
хотелось бы понять принци ее работы. Почитал про подтягивающие резисторы, вроде понятно, чтоб убрать шумы. Но как он функционирует в данном примере не совсем понятно.
Поясните пожалуйста для чайника как все это работает?
не понял ... каким ветром вам навеяло вопрос про ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ ??? прошёл по ссылке - никаких ассоциаций с подтягивающими резисторами не возникло ...
не понял ... каким ветром вам навеяло вопрос про ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ ??? прошёл по ссылке - никаких ассоциаций с подтягивающими резисторами не возникло ...
А зря. Схему видите? Резистор на ней видите? Каково его предназначение функциональное?
Так что навеяло очень правильно. Увидили резистор, задались вопросом "а нафига он тут?"
>>Если используете аппаратный I2C, то в эти "придавления" он будет переводить в в нули и единицы. А нули и единицы собирать в байты.
что такое аппаратный I2C?
Со вторым вопросом попробую сам разобраться, поищу.
P/S/ не сообразил как цитату сделать )
>>Если используете аппаратный I2C, то в эти "придавления" он будет переводить в в нули и единицы. А нули и единицы собирать в байты.
что такое аппаратный I2C?
Ну вообщем-то что такое I2C тоже можно нагуглить (он же TWI в терминологии ATMEL-ла). Это еще одна из популярных шин данных.
Что такое "аппаратный", думаю можно понять из описания выше. Кто-то должен декодировать все эти пульсации. Этим может заниматся либо скетч/библиотека, либо специальный блок внутри микропроцессора. А программисту выдавать уже "готовые цифры". Будет быстрее, надежней и меньше нагружать этой работой основной процессор. Это если он есть в камушке. Во всех дуиновых камнях - он есть (но естественно, раз он аппаратный, то работать будет только на конретных ногах, указанных в спецификации).
Точно также и UART бывает аппаратный и програмный. (он же Serial).
И "контрольный в голову", еще SPI шину будете часто встречать :)
Вообщем, в итоге, иметь представление желательно про UART/OneWire/I2C/SPI шины.
Остальные уже гораздо реже встречающаяся экзотика. UART - самое простое. OneWire/I2C/SPI в чем-то родственны. Если разобратся досконально с одной, то и другие будут более менее понятны.
>>Со вторым вопросом попробую сам разобраться, поищу.
http://robocraft.ru/blog/communication/117.html
может пригодится кому
>>Со вторым вопросом попробую сам разобраться, поищу.
http://robocraft.ru/blog/communication/117.html
может пригодится кому
Молодец. Только "а где же ответ?". Куда нужно подтягивать? А если наоборот?
в тонкости схемы я не вдавался, но сам для себя понял примерно так, что полезная информация передается когда происходит переключение с 1 на ноль, когда выключаем питание. Если смотреть текст по ссылке там написано что, 1-Wire устройство обязательно должно быть подтянуто к питанию, соответственно делаю вывод, что наоборот работать не будет.
полезная информация передается когда происходит переключение с 1 на ноль
Вот это и есть ответ на ваш вопрос. Вы верно поняли. То что "по ссылке написанно что должно быть к питанию..." это уже вторично. Это результат того что "когда происходит переключения с 1 на ноль". Поэтому нам и нужно обеспечить что-бы "по умолчанию" там была единица.
Еще вот тут нашел хорошее описание работы самого скетча
http://research.andbas.com/2012/02/1-wire-ds18s20.html
сразу все белые пятна стали понятны, трудность заключалась в том, что с датчиком у меня не было спецификации его работы (спецификации эти они что в обзем доступе?). т.е. какие команды нужно посылать, чтоб датчик их правильно принимал и обрабатывал.
т.е. какие команды нужно посылать, чтоб датчик их правильно принимал и обрабатывал.
1. Это нужно только в образовательных целях. Библиотеки, по крайней мере под этот дачик уже написаны.
2. Посмотреть "как же с ним работать" - можно заглянуть в код тех же бибилиотек.
3. Странно что вы не смогли найти "спецификаций". Уж на кого их не может не быть, так это на ds1820
Вообщем запомните волшебное слово "datasheet". Это и есть "спецификация" по умному. Он же "даташит". Разбирательство с любой железкой - желательно начинать с гугления "ЖЕЛЕЗКА datasheet".
Еще можно погуглить "ЖЕЛЕЗКА Application Notes". Но вот "application notes" это уже для каждой железки производитель пишет. Это, скажем так, рекомендации/примеры использования железки "от производителя" (типовые схемы включения, рекомендуемая обвязка и т.п.).
Иногда "Application Notes" бывает в виде отдельного документа, иногда это просто раздел даташита (как правило в конце). Так что, в любом случае начинать с поиска даташита. Если железка не какаято "китайская экзотика" - даташит найдется ;)
ещё одна суть подтягивающего резистора к VCC:
выходной каскад датчиков, схем часто выполняется по схеме "окрытый коллектор" ( на базе - сигнал, на эмитере - GND, а коллектор висит в воздухе ). и если напрямик его подсоединить ко входу Ардуины, то ток от ВЫСОКООМНЫХ сопротивлений входных цепей через коллектор-эмитер датчика не даст нужного значения U.
в этом случае нужен резистор в цепь коллектора, и с него же будет сниматься Uсигн на Ардуину, т.е. - подтягивающий резистор к VCC - это причиндал ДАТЧИКА !!!!!
почему его не поставили в датчик ?
выходной каскад может работать с напряжением 5 .... 10 .... 12 .....24 V, а на каждое напряжение нужен свой внутрикристальный резистор. производитель дал возможность использовать разные напряжения, но коллекторный резистор каждый должен рассчитать сам, под свою используемую напругу.
VCC - резистор - вхАрдуины - ток не будет большим не зависимо от номинала, ибо входные каскады Ардуины имеют мегаОмы ( это закон - чем выше вхСопротивление и ниже выхСопротивление - тем лучше ).
подсоединяем датчик - с датчика "1" - тока через подтягивающий резистор не будет протекать в коллектор, ток пойдёт VCC - резистор - вхАрдуины ( это наноамперы ), если датчик выдаёт "0" - то тут всё решает подтРезистор. ток потечёт VCC - резистор - ДатчКоллектор - ДатчЭмитер - GND.
подтягивающий к земле имеет смысл только в схемах типа VCC - разомкнКнопка - вхАрдуино. если разомкнута ( Z-состояние на выходе кнопки и вход Ардуино=антенна ). вот резистором и устраняется неоднозначность при разомкнутой кнопке, т.е. - через резистор на землю потечёт ток от входных каскадов Ардуины - она это воспримет как примерно 0. при замкнутой кнопке будет два тока - 1 VCC - замкнКнопка - входные цепи Ардуино - земля ( Ардуина это воспримет как примерно 5 ), 2 - VCC - замкнКнопка - подтРезGND - земля. в первой ветке - наноАмперы, во второй - миллиАмперы.... а может и 5 А , если резистор 1 Ом и блок питания с этим справится :)
будет время - нарисую эквивалентную схему цепей выходного каскада + входные цепи Ардуино - очень наглядно для понимания :)
Q1 - датчик, R_VCC, ( R1, R2, Q2 )=Ардуина
если датчик отсоединить то ток через параллельные R3 и R1 ограничит последовательный с ним R2.
с подткGND - ток через параллельные R3 и R1 ограничит последовательный с ним R1
.
ещё, когда датчик отключен:
R_VCC при уменьшении номинала будет всё сильнее смещать базу вхТранзАрдуины к VСС ( и выше TTL уровня "1" )
R_GND при уменьшении номинала будет всё сильнее смещать базу вхТранзАрдуины к GND ( и ниже TTL уровня "1" )
...но на токи потребления это сильно не отразится