Korzystam z DS18x20 Maxima (właściwie mam więcej niż jeden wariant) 1-przewodowych czujników temperatury do rejestrowania temperatur w różnych pokojach w domu raz na minutę. Około jednego czytania na tysiąc otrzymuję z powrotem coś całkowicie fałszywego. W środku sekwencji, która stopniowo rośnie z 65F do 70F, otrzymuję coś w rodzaju -32.1F lub 15.64F.
Czy ktoś jeszcze miał taki problem, czy jest to coś złego w mojej konfiguracji? Jeśli jest to po prostu znany problem z tymi rzeczami, będę musiał zrobić coś takiego, jak trzy czytania i wyrzucenie wartości odstającej.
Kilka stwierdzeń o mojej konfiguracji:
- Pracuję na 3,3 V.
- Sprawdzam sumę kontrolną odczytu, gdy wraca do arduino, i pasuje (lub myślę, że tak - zawsze może być błąd w tym kodzie).
- Uciekają one z normalnej mocy, a nie mocy pasożyta.
- Mam na miejscu rezystor pullup 4,7K.
- Używam tylko jednego czujnika na każdej platformie czujnikowej.
- Czujnik znajduje się na płytce drukowanej przymocowanej do czytnika arduino.
- Widzę ten sam problem z czytaniem z wielu różnych arduinos (diecimilla, pro-mini, domowe zamówienie)
arduino
temperature
1-wire
Edebill
źródło
źródło
Jeśli nie możesz znaleźć źródła błędnych odczytów, powinno być łatwo je odfiltrować i ekstrapolować z poprzednich odczytów lub interpolować między odczytami, jeśli ważna jest perspektywa. Ponieważ próbkujesz raz na minutę, możesz nawet skopiować ostatni odczyt; temperatura w pomieszczeniu prawie się nie zmieni w ciągu jednej minuty.
źródło
Może to być spowodowane błędnym odczytem przez sterownik jednego lub więcej bitów odpowiedzi temperaturowej w pewnych warunkach dużego obciążenia lub interferencją elektryczną powodującą uszkodzenie jednego lub więcej bitów.
Dokładnie zapoznaj się z arkuszem danych tutaj http://www.rentron.com/Files/ds18b20.pdf
Na stronie 5 pokazuje, że dokładna sekwencja binarna dla 85C to:
+85°C 0000 0101 0101 0000
Podobnie dla 25C jest to:
+25.0625°C 0000 0001 1001 0001
W niektórych przypadkach, jeśli sterownik trochę nie trafi, otrzymasz wartość, która jest rzeczywistą temperaturą, wyrażoną w postaci binarnej i przesuniętej w bitach. Często jest to 1 / 2x wartość docelowa w C.
Czasami można uzyskać zakłócenia elektryczne na linii, a kontroler odczytuje cały ciąg 1s. W takim przypadku otrzymasz liczbę taką jak 15,64, która wyrażona binarnie jest w rzeczywistości bardzo zbliżona do liczb między 65 a 70F, z wyjątkiem kilka pierwszych na początku.
źródło
Za to, co jest warte, kilka miesięcy temu wykonałem trochę pracy z DS18B20. Nakręciłem krótki film i napisałem na moim blogu, który zawiera linki do przykładów i przykładowego kodu. Mam nadzieję, że to może trochę pomóc! http://dailyduino.com/archives/552
źródło
Mam ich 13 w moim domu od około czterech lat. Baza danych jest trudna do obsługi (śledziłem wszystkie próbki). Ale nie widziałem tego rodzaju zachowania. Zamiast tego co jakiś czas jeden czujnik zamarza i blokuje wszystkie pozostałe, jedynym wyjściem z tego (które znalazłem) było wyłączenie napięcia zasilającego na kilka sekund. Dodałem więc mały przekaźnik do mojej płyty i ilekroć mikro wyczuje to zachowanie, resetuje cały łańcuch czujników. To się zdarza kilka razy w tygodniu.
źródło