Подключение ds18b20 к msp430 (Launchpad)

Долго ли коротко ли...

Заказал я себе халявных сэмплов от maxim (C), — датчиков температуры "ds18b20",  они мне довольно шустро были доставлены благодаря FedEx, и начал я с ними разбираться
запись в блоге
вы18и20-рв44780
ds18b20


 Разбирался я с ними-разбирался, копал интернеты, пытался самостоятельно что-то доделать, пытался использовать готовое от добрых китайцев (с каментами на родном китайском), почти уже забросил их, но добил-таки!

Единственное толковое разъяснение обнаружилось у товарища karve, за что ему огромное спасибо. Но его примеры у меня так и не заработали, хотя были достаточно просты и понятны. Всё дело оказалось во временных параметрах общения с датчиком. Как я понял, karve не удалось заставить работать датчик, используя встроенный резистор подтяжки МК. У меня оно заработало и с ним :) Сейчас уже не помню, в чём было дело, кажется, в процедурах установки 0-1 и "отпускании" шины МК.

Что работает сейчас:
— отправка команд
— получение значения регистров датчика
— чтение и преобразование температуры

Пока не удалось заставить работать поиск, почему-то МК в этой процедуре перезагружается.

Итак, библиотека
Файлы в топике: DS18b20 tm1638.zip, DS18b20 uart.zip, DS18b20_lib.zip

Комментарии (27)

RSS свернуть / развернуть
уберите это из коллективного блога…
0
Что не так, по-вашему?
0
То, что это статья из разряда: «смотрите какой я няшка: вот такую фигулинку забабахал...»
Тема этих датчиков и 1-wire жевана-пережевана сотню раз.
Если же ваша цель написать про самописную библиотеку 1-wire для MSP430 — так напишите хоть что-то (статью), что и как реализовали, про структуру либы, особенности, настройки и т.п.…
0
Тема, конечно, пережёвана знатно, не спорю, но попробуйте найти рабочий пример в интернете с подключением датчика к msp430. Я не нашёл, допилил что-то более-менее простое и выложил, — вдруг кому пригодится. С остальным согласен, слишком уж простая либа и только для одного (пока) датчика. Перенесу пока к себе, допишу текст и оформлю позднее.
0
и это чё, всё?!
0
пока нет, изыскания продолжаются :)
0
Вот честно, я не понимаю когда люди ищут готовые «библиотеки» для подключения далласа. А потом еще и выкладывают как уникальную находку. Интерфейс примитивен до безобразия, все общение с датчиком объяснено в трех картинках и одной маленькой табличке.
0
  • avatar
  • PRC
  • 22 августа 2012, 22:29
Хорошо и просто это для специалиста. Я специалист несколько в другой области, и для меня довольно сложно было довести до ума работу с датчиком, не имея под рукой даже простейшего осциллографа. Не пинайте пианиста, он лажает как умеет. Я программировать-то начал учиться совсем недавно, это мой второй проект для ланчпада.
0
Тащемта, для работы с датчиком осцил это явно лишнее. Для меня 18б20 стал первым более-менее сложным проектом (AVR, asm), но реально трудность заключалась в освоении архитектуры, нежели интерфейса. Вышеприведенные комменты можно обьяснить тем, что этот интерфейс (и DS18b20 в частности) уже освоен по самые помидоры, и уж тем более читателями этого сайта (раздражает фраза «Штучка эта примечательна тем...» — здесь это всем известно!)
0
Да, это я погорячился, ночью уже публиковал.
0
Я сделал по исходникам karve, на 16MHz завелись, на 1 работать не хочет, хотя функции delay поправил под частоту. Заметил, что если температура падает ниже +26 и продолжает падать, то библиотека начинает врать, разные значения скачут, то же если использовать библиотеку shluzzzoid, которая является компиляцией библиотеки karve и dsiroky. Во всех библиотеках не выводится минус для отрицательных значений.
Пока не понял почему начинают скакать показания после падения температуры ниже +26 ( Если палец к датчику приложить, температура приподнимается и данные перестают скакать
0
на 16MHz завелись, на 1 работать не хочет
Странно, у меня на этих частотах работает нормально. Пробовал ещё на 8MHz — тоже работает. Значения действительно скачут, но если округлить до десятых, — почти перестают скакать.

Во всех библиотеках не выводится минус для отрицательных значений.
Не выводится в терминал? В примере для tm1638 минус выводится.
0
у меня если температура меньше 26 градусов, то читается разная фигня, в основном 0 или около того ну может скакнуть до 24, никак не пойму в чем дело.
на ардуине этот же датчик нормально работает.
подключил как karve землю к p2.2 и подал на него LOW, питание к p2.1 и подал на него HIGH, данные к p2.0, p2.0 и 2.1 соединил резистором 4,7кОм
0
может питания не хватает?
0
У меня такое же предположение. Я свой датчик запитывал не от ноги МК, а от + питания, землю вешал на нормальную землю и не подключал внешний подтягивающий резистор, вместо него подключая внутренний.
0
да, заработало, когда убрал резистор внешний подтягивающий резистор, теперь данные стабильно выдаются
cfg=0x60 temp=0x18e
onewire_reset()=0
onewire_reset()=0
cfg=0x60 temp=0x18d
onewire_reset()=0
onewire_reset()=0
cfg=0x60 temp=0x18d
onewire_reset()=0
onewire_reset()=0
cfg=0x60 temp=0x18c
onewire_reset()=0
onewire_reset()=0
cfg=0x60 temp=0x18c
onewire_reset()=0
onewire_reset()=0
cfg=0x60 temp=0x18c
0
shluzzzoid, спасибо, теперь как часы работает, без внешнего резистора, набросал прогу для ПК, выводит температуру в трее
ds18b20
0
вроде, как мк поддерживает irda, может смогу управлять офисным кондиционером в зависимости от показаний датчика?
0
IRDA там программировать придётся. Я ещё не разбирался с этим пока.
0
а ик диод подойдет на роль приемника от пульта и излучателя в одном «лице»?
0
В принципе пойдет, но тогда придется городить сам приемник (если, конечно, не устраивает радиус приема пульта сантиметров в пять). Проще купить обычную TSOP'ку.
0
Здорово! На чём написали? Может быть, — поделитесь здесь со всеми?
0
на c# накидал за пару часов, параллельно изучил c# )
могу конечно выложить, если кому-то нужно, но здесь только картинки можно прикладывать в комментариях
0
еще в библиотеке не анализируется разрядность датчика, в мануале написано, что она 12 бит по-умолчанию, а я считал эти биты и оказалось что 9 бит установлено
0
на самом деле в памяти была каша, видимо 4,7кОм слишком много для ланчпада
0
Вроде как разрядность зависит от времени, выделяемого на работу внутреннего АЦП. Самая большая пауза в 750мс даёт разрядность 12бит. Это если я правильно понял :)
0
нет, время от разрядности зависит
разрядность можно поменять командой
а у меня данные в регистрах скакали пока не убрал внешний резистор
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.