CraftDuino v2.0
  • - это CraftDuino - наш вариант полностью Arduino-совместимой платы.
  • CraftDuino - настоящий конструктор, для очень быстрого прототипирования и реализации идей.
  • Любая возможность автоматизировать что-то с лёгкостью реализуется с CraftDuino!
Просто добавьте CraftDuino!

вопрос по DS18B20

Разбираюсь с этими датчиками. С одного датчика считать данные проблем нет. А вот как работать с двумя и более воткнутыми в один порт понять не могу.

По идее же надо сначала определить их ИД а уже потом по ИД с ними работать. Но не могу Duino заставить искать все ИД датчиков. Она находит один и успокаивается.
  • +1
  • 11 марта 2010, 06:04
  • vqd

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

RSS свернуть / развернуть
+
0
с несколькими датчиками работать не пробовал :(
думаю, стоит начать поиски отсюда:
www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1238032295/0
www.synbio.org.uk/instrumentation-news/1484.html
avatar

noonv

  • 11 марта 2010, 10:34
+
+1
Почему успокаивается?
По идее должно работать так (см. комментарии):
#include <OneWire.h>

OneWire  ds(1wirePin);

void setup(void)  {
  Serial.begin(9600);
}

void loop(void) {
  byte addr[8];
  
  if (!ds.search(addr)) { // поиск нового датчика
      ds.reset_search(); // если не нашли, сбрасываем поиск в начало
      return; // и возвращаемся в самое начало главного цикла void loop(void)
  }
  
  // Часть кода, которая ниже, выполняется только если
  // найден новый датчик, с которым ещё не работали в
  // главном цикле до сброса поиска

  if (OneWire::crc8( addr, 7) != addr[7]) { // Проверка CRC
      Serial.print("CRC is not valid!\n");
      return; // Если не пройдена, то в начало главного цикла и продолжаем поиск других датчиков
  }
  
  if (addr[0] != 0x28) {	// Проверка того, что найденное устройство - температурный датчик DS18B20
      Serial.print("Device is not a DS18B20 family device.\n");
      return; // Если не он, то опять в начало главного цикла на продолжение поиска
  }
  
  ds.reset();
  ds.select(addr);
  // И вот после этого селекта делаем с очередным найденным датчиком что хотим
  // После возврата в начало цикла поиск будет продолжен, пока не сработает первое условие и не выполнится ds.reset_search().
}
avatar

boa

  • 11 марта 2010, 16:26
+
0
Единственное подозрение на ds.reset(); — я не особо понимаю зачем там сброс шины происходит. Попробуй убрать.
avatar

boa

  • 11 марта 2010, 16:27
+
+1
Работает. Делаю работу на ошибками над своим кодом.
avatar

vqd

  • 11 марта 2010, 16:47
+
0
Вопрос возможно глупый. А для чего CRC проверять?
avatar

vqd

  • 11 марта 2010, 17:09
+
0
проверка правильности переданных данных :)
avatar

noonv

  • 11 марта 2010, 18:27
+
0
так и если этот тест не проходит то в чем может быть причина. Когда убираю этот тест все прекрасно работает
avatar

vqd

  • 12 марта 2010, 07:52
+
0
хм… получается — либо CRC неправильно считается, либо данные идут с помехами.
avatar

noonv

  • 12 марта 2010, 10:14
+
+1
CRC неправильно это как? :)
Помехи. Пока работает — они в каком-нибудь малозначащем разряде.
avatar

boa

  • 12 марта 2010, 15:40
+
0
:) просто описал все возможности :)))
avatar

noonv

  • 12 марта 2010, 15:42
+
0
Все равно не понимаю. Датчики воткнуты в монтажку и к Ардуино проводок ну сантимов 10. Откуда помехи то?
avatar

vqd

  • 12 марта 2010, 17:59
+
+1
1. контакт в монтажке
2. контакт в проводке к ардуино.
3. попробуй по одному датчику отцеплять — может сам датчик глючит.
avatar

boa

  • 12 марта 2010, 18:01

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.