1-Wire, притовится дачиком.

drump
Offline
Зарегистрирован: 08.05.2014

Добрый день! Не могу заставить Arduino стать датчиком DS18B20. Имеется система, в ней несколько температурных датчиков( ds18b20, по 1-wire, схема питания - внешняя, т.е. по питание идет по отдельному проводу), необходимо регулировать температуру, а поскольку нагревать датчики руками долго и хлопотно, было принято решение подменить их arduino. Используя библиотеку OneWire и примеры  смог считать адреса дачиков(ну и какую температуру они выводят). Далее использую библиотеку OneWireSlave, чтобы моя ардуина притворилась датчком( сами датчики отключаю). И вот здесь я встал намертво. 1 - библиотека с http://robocraft.ru/blog/arduino/302.html, скетч : 

#include "OneWireSlave.h"
unsigned char rom[8] = {0x28, 0x63, 0x06, 0x78, 0x03, 0x00, 0x00, 0x48 };
//char T[9] = {80, 1, 2, 2, 127, 255, 16, 16, 92};
char T[9] = {0x51, 0x01, 0x02, 0x02, 0x7F, 0xFF, 0x0F, 0x10, 0xEB};
char date[255];
OneWireSlave ds(6);
 
void setup(void) 
{
  ds.setRom(rom);
  Serial.begin(9600);  
}
 
void loop(void) 
  bool a = ds.waitReset();
  bool b = ds.presence();
  
  if ((a == 1) & (b == 1))
  {
    delayMicroseconds(250);
    int c = ds.recvData(date,250);
    Serial.print("c = ");
    Serial.println( c);
    for (int i = 0 ;i < c ; i++)
    {
      Serial.print(" ");
      Serial.print(date[i],HEX);
    }
    Serial.println("");
    if (c == 19)
    {
      Serial.println("SEND's");
//
    }
  }
}

я получаю команды :

1) 0x55 (имя устройства) 0xBE (и еще 9 непонятных байт , которые каждый раз меняются)

2) 0xFFFFFFCC 0x44

Как я понимаю команда 2 - предназначена, чтобы датчик начал преобразовывать температуру, а 1 - чтобы отправил данные. К сожалению эти данные не отражаются в системе(пишет что нет связи). Могу только предположить что дело в таймингах, но идеи кончились уже. Буду очень благодарен, если сможете помочь!

 

drump
Offline
Зарегистрирован: 08.05.2014

Забыл добавить, в месте 

 if (c == 19)

{

      Serial.println("SEND's");
}
в условии проверяю что имя устройства равно rom и отправка данных -
int w = ds.sendData(T,9);
w при этом равно 9.
 
Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

заглогшая тема, никто не пробовал также эмулировать работу 1820 ??

inspiritus
Offline
Зарегистрирован: 17.12.2012

Прямо эпидемия сегодня

Если хотите , что бы Вам помогли, научитесь постить текст программы в соответствии с правилами форума,

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

inspiritus пишет:

Прямо эпидемия сегодня

хуже - завтра 28/05/2014

Logik
Offline
Зарегистрирован: 05.08.2014

Весьма непростая задача, надо быстрый обработчик прерывания писать. И остальные прерывания запрещать, даже системные часики. Потому как надо реагировать на импульсы порядка 1 мксек. ТС уже пошти как 3 года пишет..

gena
Offline
Зарегистрирован: 04.11.2012

  Ещё бы и название темы подправить. Три раза нужно прочесть, что бы понять о чём тема. 

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

мне один раз понадобилось..

Logik
Offline
Зарегистрирован: 05.08.2014

Угу. Пока gena не ткнул, я и незамечал в названии проблем. Привычка работать с неполной, неточной и недостоверной инфой приводит к тому что мелочи исправляются на уровне подсознания, не утруждая сознание.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Logik.Согласен. Это называют деформацией сознания. Все вокруг видят мусор, а уборщики объем работы, который надо сделать. Вот и делаешь ее на автомате минуя сознание.

gena
Offline
Зарегистрирован: 04.11.2012

  Мне сложно догадаться, что для поисковика нужно задать именно такие слова.