Как изменить разрешение DS18B20?

Я использую датчик DS18B20 с этой библиотекой, задержка 750 мс вызывает проблему в части таймера моего кода. приведенный ниже код взят из DallasTemperature.cpp:

// возвращает количество миллисекунд ожидания завершения преобразования (на основе таблицы данных IC)
int16_t DallasTemperature::millisToWaitForConversion(uint8_t bitResolution) {

    switch (bitResolution) {
    case 9:
        return 94;
    case 10:
        return 188;
    case 11:
        return 375;
    default:
        return 750;
    }

Я читаю температуру вот так:

#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS A0
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup() {}

void loop () {
    float currentTemp = sensors.getTempCByIndex(0);
    sensors.requestTemperatures();
}

датчик не подключен в паразитном режиме, и есть только один датчик.

Как изменить разрешение с 12 на 9 бит?

, 👍0


2 ответа


Лучший ответ:

1

Просто:

sensors.setResolution(9);

Обычно по умолчанию он равен 9, но затем исследует подключенное устройство, чтобы найти максимальное разрешение, которое оно поддерживает, и устанавливает его в это значение. Обычно это делается в sensors.begin (), которое вы опустили из приведенного выше фрагмента. Если у вас этого нет, он все равно будет на 9 бит, а также автобус, вероятно, все равно не будет работать.

,

спасибо, мне тоже нужно указывать адрес? sensors.begin(); sensors.SetResolution(9); должен быть в настройке void?, @ElectronSurf

'sensors.begin() определяет количество подключенных датчиков и определяет максимальное поддерживаемое разрешение. датчики.SetResolution(9) " устанавливает разрешение для всех будущих транзакций для всех подключенных устройств., @Majenko


1

Кажется, работает лучше:

sensors.setResolution(tempDeviceAddress, TEMPERATURE_PRECISION);
,