Полная версия этой страницы:
ds18B20 + AVR
Oleg_IT
Jul 1 2005, 08:12
Работаю с программной реализацией интерфейса с ds18B20. Возможно организовать паразитное питание с помощью пинов МК т.е. без MOSFET пранзистора?
Цитата(Oleg_IT @ Jul 1 2005, 12:12)
Работаю с программной реализацией интерфейса с ds18B20. Возможно организовать паразитное питание с помощью пинов МК т.е. без MOSFET пранзистора?
Можеш попробывать
Я правда так ни разу не делал.
Основной вопрос удастся ли тебе вытянуть нужный ток для датчика
(или нескольких если их много) с ножки микроконтроллера
потребление ds18B20 возрастает в момент преобразования
температуры и записи в EEPROM
Oleg_IT
Jul 1 2005, 09:26
Я пробую, но не получается. выдает или 85 (преобразования не было) или 127.... (все единицы). Тока должно хватить, у датчика не более 2 мА, а пин тянет до 20. Может я чего не понимаю, после соответствующих команд ставлю на оба пина (TXD и RXD) по единице на выход, жду секунду... и получаю константу. Напряжения тоже хватает, около 5 В.
Цитата(Oleg_IT @ Jul 1 2005, 13:26)
Я пробую, но не получается. выдает или 85 (преобразования не было) или 127.... (все единицы). Тока должно хватить, у датчика не более 2 мА, а пин тянет до 20. Может я чего не понимаю, после соответствующих команд ставлю на оба пина (TXD и RXD) по единице на выход, жду секунду... и получаю константу. Напряжения тоже хватает, около 5 В.
А задержку на преобразование выдерживаеш
если паразитное питание то время преобразования температуры
может достигать 1 секунды
Oleg_IT
Jul 1 2005, 10:42
Выдерживаю. Жду секунду. Может мало?
Кстати, пользуюсь функцией __delay_cycles(…); Сколько максимум она может дать?
Oleg_IT
Jul 1 2005, 11:10
Да, ещё один вопрос. Паразитное питание ставится на преобразование Convert T [44h] и на чтение Copy Scratchpad [48h]. Со временем преобразования всё ясно, 1 с., а сколько нужно держать питание при чтении? Не вижу я этого в даташите.
Цитата(Oleg_IT @ Jul 1 2005, 14:42)
Выдерживаю. Жду секунду. Может мало?
Кстати, пользуюсь функцией __delay_cycles(…); Сколько максимум она может дать?
Секунды мне всегда хватало за глаза.
А насчет функции ничего сказать не могу
я весь обмен с этими датчиками писал сам
А вообще датчик то у вас отвечает на другие
команды?
Цитата(Oleg_IT @ Jul 1 2005, 15:10)
Да, ещё один вопрос. Паразитное питание ставится на преобразование Convert T [44h] и на чтение Copy Scratchpad [48h]. Со временем преобразования всё ясно, 1 с., а сколько нужно держать питание при чтении? Не вижу я этого в даташите.
Там есть - в описании этой команды рекомендуется время не менее 10 миллисекунд
Copy Scratchpad [48h]
This command copies the scratchpad into the E2 memory of the DS18B20, storing the temperature trigger
bytes in nonvolatile memory. If the bus master issues read time slots following this command, the
DS18B20 will output 0 on the bus as long as it is busy copying the scratchpad to E2; it will return a 1
when the copy process is complete. If parasite-powered, the bus master has to enable a strong pullup for
at least 10 ms immediately after issuing this command.
Да еще по этой команде память не читается а только копируется
из ЕЕПРОМ В ОЗУ (или блокнот как они называют)
Oleg_IT
Jul 1 2005, 12:18
Датчик (датчики, до трёх ставлю) живые, по трёх проводной схеме работают хорошо. С паразитным питанием отвечают на запрос по ROM, выводил на индикатор, ROM-ы правильные.
Цитата(Oleg_IT @ Jul 1 2005, 13:26)
Я пробую, но не получается. выдает или 85 (преобразования не было) или 127.... (все единицы). Тока должно хватить, у датчика не более 2 мА, а пин тянет до 20. Может я чего не понимаю, после соответствующих команд ставлю на оба пина (TXD и RXD) по единице на выход, жду секунду... и получаю константу. Напряжения тоже хватает, около 5 В.
Тогда может все дело в конфигурации пинов AVR
По идее мы должны делать так
При обмене данными пин который работает вместо транзистора
конфигурируется как вход
При преобразовании температуры конфигурируем его как выход в 1
По окончании задержки на преобразование переводим его в исходное состояние (вход) и начинаем читать температуру
Stanislav
Jul 1 2005, 16:29
Цитата(Oleg_IT @ Jul 1 2005, 12:26)
Я пробую, но не получается. выдает или 85 (преобразования не было) или 127.... (все единицы). Тока должно хватить, у датчика не более 2 мА, а пин тянет до 20. Может я чего не понимаю, после соответствующих команд ставлю на оба пина (TXD и RXD) по единице на выход, жду секунду... и получаю константу. Напряжения тоже хватает, около 5 В.
DS18B20, как отмечено ранее, увеличивает ток потребления в момент преобразования, причем он имеет импульсный характер. Убедитесь с помощью осциллографа, нет ли значительных кратковременных просадов на линии паразитного питания во время преобразования. Кстати, DSовцы в даташыте не зря на "паразитной" схеме изобразили P-канальный половик.
А нельзя поставить возле датчика диод и конденсатор, и запитать им датчик. Схема двухпроводная, а для датчика-как с внешним питанием. Я когдато так делал, работало на ура, только следите, чтобы на линии долго 0 не висел - емкость периодически требуется заряжать.
Oleg_IT
Jul 4 2005, 05:37
Цитата(Serjio @ Jul 3 2005, 12:17)
А нельзя поставить возле датчика диод и конденсатор, и запитать им датчик. Схема двухпроводная, а для датчика-как с внешним питанием. Я когдато так делал, работало на ура, только следите, чтобы на линии долго 0 не висел - емкость периодически требуется заряжать.
Что-то я не совсем понял идею. Что на что там должно замыкаться?
Обычная выпрямительная схема.
Код
г-------------------- TxD/RxD of DS1820
|
------+-----|>|-+-------- Vcc of DS1820
|
---
---
|
+---------- GND of DS1820
|
---
Абсолютно правильно, можно еще последовательно с диодом сопротивление килоом на 10, чтобы бросков небыло.
А может вместо стольких огородов поставить транзистор как рекомендуется
при паразтином питании
AndyBig
Jul 4 2005, 11:10
Работаю с датчиками ds18s20 по паразитному питанию. Подключаю их как рекомендовано в даташите - сопротивление 4,7К от шины к питанию. Ну и кроме того сразу после передачи команды старта измерения выставляю ногу контроллера в "1" и удерживаю в единице все время преобразования (1 сек).
Никаких проблем с датчиками не возникало, 4 датчика на одной шине при этом работают на ура (измерение происходит у всех одновременно). По спецификации потребление у ds18s20 при измерении не превышает 1 mA, так что даже десяток датчиков могут быть запитаны от одной ноги контроллера.
Oleg_IT
Jul 4 2005, 11:40
Цитата(AndyBig @ Jul 4 2005, 15:10)
Работаю с датчиками ds18s20 по паразитному питанию. Подключаю их как рекомендовано в даташите - сопротивление 4,7К от шины к питанию. Ну и кроме того сразу после передачи команды старта измерения выставляю ногу контроллера в "1" и удерживаю в единице все время преобразования (1 сек).
Никаких проблем с датчиками не возникало, 4 датчика на одной шине при этом работают на ура (измерение происходит у всех одновременно). По спецификации потребление у ds18s20 при измерении не превышает 1 mA, так что даже десяток датчиков могут быть запитаны от одной ноги контроллера.
ОК, я вреде так и делаю. У меня на ноге TDX сидят два транзистора (из AVR318 схему взял) Кидаю команду на преобразование и на ноги TDX и RXD ставлю на выход 1. И.... Может я 10 мкс не выдерживаю? 1 стоит даже дольше чем 1 с. И вообще в этом случае цикл жутко удлиняется.
AndyBig
Jul 4 2005, 12:13
10 мкс - это не время, в течении которого требуется удерживать питание на шине данных.
Даллас говорит:
Цитата
The DQ line must be switched over to the strong pullup within 10 µs maximum after issuing any protocol that involves copying to the E2 memory or initiates temperature conversions.
что означает примерно: Линия DQ должна быть зашунтирована на питание через максимум 10 мкс после подачи любой команды, выполняющей копирование в E2 или инициирующей измерение.
То есть выдерживать 10 мкс НЕ НУЖНО. Наоборот - после выдачи команды на измерение нужно как можно быстрее (максимум - в течении 10 мкс) выставить питание на шину.
И еще Даллас говорит:
Цитата
Temperature conversion takes up to 750 ms. After receiving the Convert T protocol, if the part doesnot receive power from the VDD pin, the DQ line for the DS18B20 must be held high for at least a period greater than tconv to provide power during the conversion process. As such, no other activity may take place on the 1-Wire bus for at least this period after a Convert T command has been issued.
что в вольном переводе значит: Измерение температуры занимает до 750 мс. После приема команды измерения, если датчик не запитан внешним питанием, линия DQ должна быть подтянута к питанию как минимум на период времени, превышающий время измерения. Как следствие этого, никакой активности на шине в течении этого периода быть не должно.
Кстати, а что за RXD и TXD? У датчиков же всего одна линия данных...
Oleg_IT
Jul 4 2005, 12:35
10 мкс я именно так и понимаю. И если я опоздаю, то преобразование сорвётся. Так?.
RXD и TXD это пины AVR-а из схемы AVR318. RXD на прямую, на шину идёт, а TXD через два транзистора также идёт на ту же шину.
AndyBig
Jul 4 2005, 14:32
Цитата
если я опоздаю, то преобразование сорвётся. Так?
Да, именно так. Подозреваю, что датчик после этого может даже вообще уйти в полный ступор

.
Цитата
RXD на прямую, на шину идёт, а TXD через два транзистора также идёт на ту же шину.
А зачем такие сложности? Я только одну ногу контроллера задействую, переключая ее на вход или на выход.
Oleg_IT
Jul 5 2005, 10:23
А зачем такие сложности? Я только одну ногу контроллера задействую, переключая ее на вход или на выход.
[/quote]
Я сам сдесь ни чего не сачинял, взял у Атмела пример и немного подработал под себя.
Где можно найти пример с использованием одной ноги?
AndyBig
Jul 5 2005, 11:50
Вот то, чем пользуюсь я.
Переделка из далласовского примера, адаптированная для удобства и AVR

.
Я без проблем использовал ее на двух разных мегах, на разном клоке (1 и 8 МГц) лишь меняя несколько настроек в .h файле.
Вообще-то для питания датчиков паразитным питанием, требуются датчики DS18S20PAR - специально для этого приспособленные.
AndyBig
Jul 5 2005, 12:11
Они не требуются, они просто более адаптированы для этого. Но питать паразитным питанием можно датчики и без PAR-редакции, это ясно указано в спецификациях.
Я тоже всегда пользуюсь только одной ногой контроллера для обмена с датчиком а вторую обычно использовал для управления транзистором,
если использовал паразитное питание (от одного пина запитывать линию
в момент преобразования я не пробывал)
Oleg_IT а длинна линии связи с датчиком у вас какая?
AndyBig
Jul 5 2005, 12:42
Кстати, по длине линии мне тоже интересно...
А вообще - кто на какой длине линии запускал ds18s(b)20?
Запускал до 200 метров но без паразитного питания
проблемы были но они решаемы
кроме длинны еще важным фактором является количество датчиков на этой ветке.
Oleg_IT
Jul 5 2005, 12:59
В текущем проекте длина линии не более 3 м. 1-3 датчика (модификации)
По поводу, сколько линий и сколько транзисторов - у меня такое мнение. Если можно обойтись минимумом, без ухудшения качества, конечно, то надо так и делать. Стоимость, однако, в серии чувствительно будет.
AndyBig
Jul 5 2005, 13:11
Уверен, что метров до 5 никаких проблем возникать не должно. У меня на одном метре 4 датчика чувствуют себя прекрасно, питаясь паразитно от одной ноги контроллера (плюс подтягивающий резюк 4,7К).
Согласен с AndyBig
При такой длинне никаких вопросов в линии возникать не должно
При длинных линиях возникают звоны в линиях которые сбивают
передачу данных.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.