Arduino Polska Forum

Pełna wersja: rozdzielczość DS18B20 Arduino UNO
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
mam od kilku dni Arduino UNO, z kilku przykładów "złożyłem program do obsługi 4. czujników DS18B20. Nie wiem, gdzie i jak ustawić rozdzielczość na 12 bitów. Program działa ale tylko z rozdzielczością 10. bitów /różnicę temperatur pokazuje co 0,25 st. C. Może ktoś wie, co z tym zrobić?
Jeśli to nie ten dział, proszę moderatora o przeniesienie do innego działu.
kod:
Kod:
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>


LiquidCrystal_I2C lcd(0x27,24,2); //adres układu PCF8572, 24. znaki, 2. linie
    // numery pinów do których podłączasz czujniki DS18B20
#define ONE_WIRE_BUS_1 2 // czujnik 1. na pin 2
#define ONE_WIRE_BUS_2 4 // czujnik 2. na pin 4
#define ONE_WIRE_BUS_3 0 // czujnik 3. na pin 0
#define ONE_WIRE_BUS_4 1 // czujnik 4. na pin 1

OneWire oneWire_wew(ONE_WIRE_BUS_1);
OneWire oneWire_zew(ONE_WIRE_BUS_2);
OneWire oneWire_wew1(ONE_WIRE_BUS_3);
OneWire oneWire_zew1(ONE_WIRE_BUS_4);

DallasTemperature sensor_wew(&oneWire_wew);
DallasTemperature sensor_zew(&oneWire_zew);
DallasTemperature sensor_wew1(&oneWire_wew1);
DallasTemperature sensor_zew1(&oneWire_zew1);

void setup(void)
{
    
    Serial.begin(9600);
    Serial.println("Dallas Temperature Control Library Demo - TwoPin_DS18B20");
    Serial.print("pomiar temperatury...");
    
    sensor_wew.begin();
    sensor_zew.begin();
    sensor_wew1.begin();
    sensor_zew1.begin();
   
    lcd.init();
    
   }

void loop(void)
{
    
    
    sensor_wew.requestTemperatures();
    sensor_zew.requestTemperatures();
    sensor_wew1.requestTemperatures();
    sensor_zew1.requestTemperatures();
  
    lcd.setCursor(0,0); // czujnik 1
    lcd.print("T1 ");
    lcd.print(sensor_wew.getTempCByIndex(0));
    lcd.setCursor(7,0);
    lcd.print(" ");
   
    lcd.setCursor(8,0);  // czujnik 2
    lcd.print("T2 ");
    lcd.print(sensor_zew.getTempCByIndex(0));
    lcd.setCursor(19,0);
    lcd.print((sensor_wew.getTempCByIndex(0))-(sensor_zew.getTempCByIndex(0)));
  
    lcd.setCursor(0,1);  // czujnik 3
    lcd.print("T3 ");
    lcd.print(sensor_wew1.getTempCByIndex(0));
    //
    lcd.setCursor(10,1);  // czujnik 4
    lcd.print("T4 ");
    lcd.print(sensor_zew1.getTempCByIndex(0));
    lcd.setCursor(19,1);
    lcd.print((sensor_wew1.getTempCByIndex(0))-(sensor_zew1.getTempCByIndex(0)));
    
    delay(1000);
}
Jak używasz biblioteki to najprościej zajrzeć do jej katalogu i otworzyć plik keywords.txt. Są tu dostępne funkcje/metody dla biblioteki, np. setResolution, a przykłady są w menu Arduino. Nie wiem czy to nie jest jakiś problem związany z multibus, bo domyślnie jest rozdzielczość 12bit.
Kod programu wklejaj w kod w pełnej edycji.
dzięki "kaczakat" za podpowiedź!
Jak pisałem, jestem "nowy"  w tej dziedzinie programowania w C /przedtem robiłem w assemblerze do Z80/, ale postaram się coś z tym zrobić. Dziwi mnie ta rozdzielczość, bo jeśli podamy  napięcie do DS18B20, rozdzielczość powinna się ustawić na 12.bit. Jak uzyskam tę rozdzielczość 12. bit, dam znać.
Dzięki!
stan
Może weź lupę i przyjrzyj się temu czujnikowi, są bardzo podobne o mniejszej rozdzielczości, google podpowie co mam na myśli. Lub po prostu wgraj inny przykład z biblioteki, przetestuj z jednym czujnikiem.