DS18B20 – oryginał czy podróbka?
W ostatnich latach dużą popularność zdobył termometr DS18B20. W handlu najczęściej spotkamy się z tanimi (kilka zł) podróbkami posiadającymi kilka istotnych wad. Oryginalny układ kosztuje około 20 zł. Nie ma gwarancji, że płacąc za układ 20 zł otrzymamy oryginał. Jak odróżnić oryginał od podróbki?
Jakie wady mają podróbki układów DS18B20? Co w nich nie działa lub działa źle? Na te pytania znajdziesz odpowiedź w tym artykule.
Co będzie potrzebne?
Arduino UNO i ewentualnie moduł wyświetlacza LED z układami 74HC595. Po zmontowaniu urządzenia według schematu z rysunku 1 (przycisk i wyświetlacz nie są niezbędne) i wgrania do Arduino programu „TestDS18B20” można przystąpić do testów.
Zmontowany prototyp pokazano na fotografii 2.
Trochę teorii
Czym się różni oryginał od podróbki? Najważniejsze różnice, przy czym nie wszystkie muszą występować razem:
1) dokładność termometru przekracza dopuszczalne granice,
2) rozdzielczość mniejsza niż 12-bit,
3) nie działają rejestry alarmu,
4) nie działa pamięć EEPROM,
5) zakres numerów seryjnych przekracza 02`00`00`00`00`00`00 (562949953421312 dziesiętnie),
6) nie działają komendy kalibracji.
Pierwsze dwie różnice mogą być uciążliwe dla użytkownika, czwarta raczej rzadko dla arduinowca, bo nie widziałem jeszcze bibliotek, które by używały EEPROM, ostania dla użytkownika nie ma znaczenia. Znajomość różnic pozwala oddzielić ziarna od plew. Opieranie się na punkcie numer jeden jest raczej problematyczne, najłatwiej testować na podstawie punktu 5. Producent układu numeruje układy, każdy ma unikalny numer. Numeracja zaczyna się od 0. Raczej nie jest możliwe aby wyprodukowano 562 949 953 421 312, czyli blisko 563 bilionów układów. Dla porównania Ziemia ma trochę ponad 8 miliardów mieszkańców. Na każdego mieszkańca przypadałoby więc ponad pół miliona czujników!
Test 1 (numer seryjny)
Najłatwiej stwierdzić podróbkę na podstawie numeru seryjnego układu, poniżej fragment kodu odpowiedzialny za sprawdzanie numeru:
if ( ! sensorAddress[5] && ! sensorAddress[6] ) { Serial.println(F(„SN ROM OK”)); } else { Serial.println(F(„SN ROM ERROR”)); fake.fake = fake.rom = true; }
We fragmencie programu widać dziwny zapis
Serial.println(F(„SN ROM ERROR”));
Co to za dziwne F? To informacja dla kompilatora aby tekst był umieszczony w pamięci FLASH. W przeciwnym wypadku znajdzie się on w RAM a ściślej w FLASH i RAM. Przy starcie programu tekst zostanie przepisany z FLASH do RAM i z niej wyświetlony. Gdy tekst znajduje się w F() będzie wyświetlany bezpośrednio z FLASH. Niestety, trzeba być ekspertem aby te wszystkie zawiłości znać i pamiętać o nich. Mimo że napisałem setki programów na AVR czasem o tym zapominam, dlatego wolę ARM, gdzie tego problemu nie ma.
Test 2 (rejestry alarmu)
Test nie jest mojego autorstwa. Można go znaleźć w pliku „discover_fake_DS18B20”. Do rejestrów alarmu zapisywane są zanegowane wartości jakie wcześniej odczytano. Następnie odczytywane są te rejestry i porównywane:
(…) ciach!
To jest tylko fragment artykułu, którego pełna wersja ukazała się w numerze sierpniowym czasopisma Zrozumieć Elektronikę (ZE 8/2023). Pełna wersja czasopisma umieszczona jest pod tym linkiem. Natomiast niepełna, okrojona wersja, pozwalająca zapoznać się z zawartością numeru ZE 8/2023 znajduje się tutaj.
SaS, ZE
sas.ze@vp.pl
Uwaga! Osoby, które nie są (jeszcze) stałymi Patronami ZE, mogą nabyć PDF-y z pełną wersję tego numeru oraz wszystkich innych numerów czasopisma wydanych od stycznia 2023, „stawiając kawę” (Cappuccino = 10 złotych za jeden numer czasopisma w postaci pliku PDF).
W tym celu należy kliknąć link (https://buycoffee.to/piotr-gorecki), lub poniższy obrazek
Następnie wybrać:
– jeśli jeden numer ZE – CAPPUCINO (10zł),
– jeśli kilka numerów ZE – WSPIERAM ZA. I tu wpisać kwotę zależną od liczby zamawianych numerów – wydań (N x 10zł),
Wpisać imię nazwisko.
Podać adres e-mail.
Koniecznie zaznaczyć: „Chcę dołączyć wiadomość dla Twórcy” i tu wpisać, który numer lub numery mamy wysłać na podany adres e-mailowy.