DS1820B возвращает только -127

Я использовал один датчик DS1820B в схеме макетной платы AVR, и он там работает, теперь я попытался подключить его к мегаплате Arduino с помощью кода, приведенного ниже, а также другой библиотеки, расположенной ниже.

В настоящее время контакт данных подключен к контакту 10 на плате Arduino, но я также попробовал контакт 2, как показано на этом рисунке:

https://lastminuteengineers.com /wp-content/uploads/2018/12/Wiring-Multiple-DS18B20-Temperature-Sensors-With-Arduino.png

я изменил: #define ONE_WIRE_BUS 10 соответственно.

После этого я поставил чип обратно на макетную плату, и он все еще работает. Я также попробовал это с резистором 4,7 кОм на линии передачи данных в качестве подтяжки .... все еще -127.

Есть идеи?

#include <SPI.h>
#include <SD.h>
/********************************************************************/
// Сначала подключаем библиотеки
#include <OneWire.h>
#include <DallasTemperature.h>
/********************************************************************/
// Провод данных подключен к контакту 2 на Arduino
#define ONE_WIRE_BUS 10
/********************************************************************/
// Настройка экземпляра oneWire для связи с любыми устройствами OneWire
// (не только температурные микросхемы Maxim/Dallas)
OneWire oneWire(ONE_WIRE_BUS); 
/********************************************************************/
// Передаем нашу ссылку oneWire в Dallas Temperature.
DallasTemperature sensors(&oneWire);
/********************************************************************/ 

void setup() {
  // Открытие последовательной связи и ожидание открытия порта:
  Serial.begin(9600);
  while (!Serial) {
    ; // ждем подключения последовательного порта. Требуется только для родного порта USB
  }
 sensors.begin(); 
}


void loop() {

  Serial.print("Temperature is: "); 
 Serial.print(sensors.getTempCByIndex(0)); // Почему "по индексу"?
   // Вы можете иметь более одного DS18B20 на одной шине.
   // 0 относится к первой микросхеме на проводе
   delay(1000); 


}

второй код:

#include "DS18B20Events.h"

// Пин для DS18B20
#define ONE_WIRE_BUS 10

/********************************************************************/
// Настройка экземпляра oneWire для связи с любыми устройствами OneWire
// (не только температурные микросхемы Maxim/Dallas)
OneWire oneWire(ONE_WIRE_BUS);

// Инициируем DallasTemperature
DallasTemperature dallasTemperature(&oneWire);

//Инициализируем термометр с индексом 0 (по умолчанию)
DS18B20Events thermometer(0);

// функция настройки запускается один раз, когда вы нажимаете сброс или питание платы
void setup() {  
  Serial.begin(9600);
  DS18B20Events::setup(&dallasTemperature); // Связать DS18B20Events с объектом DallasTemperature
  DS18B20Events::setInterval(5000); // Установите минимальный интервал в миллисекундах между двумя измерениями. По умолчанию в методе setup() установлено значение 10000.

  // подписываемся на событие изменения температуры
  thermometer.onChange = temperatureChanged;
}

// функция цикла выполняется снова и снова, пока питание не будет отключено или не будет сброшено
void loop() {
  thermometer.loop(); // Обязательно для измерения температуры и запуска события при необходимости

  Serial.print(thermometer.getTempC()); // При необходимости получить последнее измеренное значение tempC.
  Serial.print(" measured ");
  Serial.print((millis() - thermometer.getMillis()) / 1000);
  Serial.println(" seconds ago.");

  delay(1000);
}

void temperatureChanged(uint8_t index, float tempC)
{
  Serial.print(tempC);
  Serial.print(" new tempC at index ");
  Serial.println(index);
}

, 👍-1

Обсуждение

Пожалуйста, опубликуйте фотографию вашей проводки (включая четкое изображение полос на подтягивающем резисторе)., @Dougie

Вам нужна фотография вашей НАСТОЯЩЕЙ проводки к Arduino, а не схема Fritzing того, как должна выглядеть ваша проводка., @Dougie

Я не уверен, что это было, но теперь он работает со вторым кодом. первый, наверное, тоже прав. Может быть, я просто остыл (-127C) несколько часов назад... о нет. Вероятно, для этого тоже есть страница stackoverflow., @James Baker

вы наверное забыли подтягивающий резистор, @david

Я нашел эту страницу, потому что у меня была похожая проблема. Я пытался подключиться к ESP01. Мне не удалось заставить его читать GPIO3, GPIO1 или GPIO0, но я смог заставить его работать с GPIO2. Кажется, он может быть весьма чувствителен к сопротивлению подтягивания., @Richard Thomas


3 ответа


1

Ошибка 127 — это ошибка подключения, проверьте проводку:

,

-1

Не знаю, что это было, но теперь работает со вторым кодом. первое, вероятно, тоже верно.

Может быть, я просто охладился (-127C) несколько часов назад... о нет. Вероятно, для этого тоже есть страница stackoverflow.

,

0

вы, наверное, забыли подтягивающий резистор

,