• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
rozdzielczość DS18B20 Arduino UNO
#1
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);
}
 
Odpowiedź
#2
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.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#3
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
 
Odpowiedź
#4
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.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości