Termometr cyfrowy DS18B20 obudowy i wyprowadzenia

Podobne dokumenty
Projekt MARM. Dokumentacja projektu. Łukasz Wolniak. Stacja pogodowa

Spis tre 1. Przedstawienie standardu 1-wire Dokumentacja układu DS18B Obsługa termometru DS18B20 w j

Magistrala I 2 C. Podstawy systemów mikroprocesorowych. Wykład nr 5 Interfejsy szeregowe c.d.

2.1 Porównanie procesorów

Magistrala SPI. Linie MOSI i MISO sąwspólne dla wszystkich urządzeńna magistrali, linia SS jest prowadzona do każdego Slave oddzielnie.

Wydział Elektryczny. Katedra Automatyki i Elektroniki. Instrukcja do ćwiczeń laboratoryjnych z przedmiotu: SYSTEMY CYFROWE 1 MAGISTRALA 1-WIRE

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

1.1. Pozycyjne systemy liczbowe

Systemy wbudowane Obsługa interfejsu 1-Wire na przykładzie termometru DS18B20

OBSŁUGA INTERFEJSU 1-WIRE NA PRZYKŁADZIE DS18B20

Komunikacja w mikrokontrolerach Laboratorium

16. Szeregowy interfejs SPI

Przetwornik analogowo-cyfrowy

1W-H3-05(K)* Czytnik RFID 125 khz Unique. Instrukcja

Arytmetyka liczb binarnych

UW-DAL-MAN v2 Dotyczy urządzeń z wersją firmware UW-DAL v5 lub nowszą.

4 Transmisja szeregowa na przykładzie komunikacji dwukierunkowej z komputerem PC, obsługa wyświetlacza LCD.

Systemy Wbudowane. Arduino C. Arduino C - stałe. Arduino C - Stałe. Arduino C - Stałe. Funkcje matematyczne. Arduino C - Stałe

Laboratorium mikroinformatyki. Szeregowe magistrale synchroniczne.

Komunikacja w mikrokontrolerach Laboratorium

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

1W-H3-04P (K)* *Litera K odnosi się do wersji czytnika ze wspólną katodą. Czytnik RFID 125 khz Unique. Karta produktu

Programowanie mikrokontrolerów AVR z rodziny ATmega.

Poradnik programowania procesorów AVR na przykładzie ATMEGA8

SYSTEMY LICZBOWE. Zapis w systemie dziesiętnym

Wydział Elektryczny. Katedra Automatyki i Elektroniki. Instrukcja. do ćwiczeń laboratoryjnych z przedmiotu: SYSTEMY CYFROWE 1.

MS360-LPM. wersja 1.09 (wersja robocza) Dokumentacja użytkownika

Podstawy działania układów cyfrowych...2 Systemy liczbowe...2 Kodowanie informacji...3 Informacja cyfrowa...4 Bramki logiczne...

1W-H0-04P (K)* *Litera K odnosi się do wersji czytnika ze wspólną katodą. Czytnik RFID MHz Mifare. Karta produktu

Expandery wejść MCP23S17 oraz MCP23017

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 =

Magistrala LIN

Opis czytnika TRD-FLAT CLASSIC ver Naścienny czytnik transponderów UNIQUE w płaskiej obudowie

SYSTEMY LICZBOWE 275,538 =

1. Operacje logiczne A B A OR B

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

Obługa czujników do robota śledzącego linie. Michał Wendland czerwca 2011

DYDAKTYKA ZAGADNIENIA CYFROWE ZAGADNIENIA CYFROWE

Arytmetyka komputera. Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka. Opracował: Kamil Kowalski klasa III TI

Sieci Komputerowe Mechanizmy kontroli błędów w sieciach

Opis czytnika TRD-80 CLASSIC ver Moduł czytnika transponderów UNIQUE z wbudowaną anteną

MiniModbus 4DO. Moduł rozszerzający 4 wyjścia cyfrowe. Wyprodukowano dla. Instrukcja użytkownika

MiniModbus 4DI. Moduł rozszerzający 4 wejścia cyfrowe. Wyprodukowano dla

RS-H0-05 (K)* Czytnik RFID MHz Mifare. Karta użytkownika

Kod U2 Opracował: Andrzej Nowak

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

MiniModbus 4DI-M. Moduł rozszerzający 4 wejścia cyfrowe z pamięcią liczników. Wyprodukowano dla

1W-H3U-05. Czytnik RFID 125 khz UNIQUE. Karta produktu

Wstęp do informatyki- wykład 2

Konwerter 1 Wire > SPI opisany P R Ow JVerilogu

Programowanie mikrokontrolerów 2.0

f we DZIELNIKI I PODZIELNIKI CZĘSTOTLIWOŚCI Dzielnik częstotliwości: układ dający impuls na wyjściu co P impulsów na wejściu

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Zasady arytmetyki stałoprzecinkowej oraz operacji arytmetycznych w formatach Q

Mini Modbus 1AI. Moduł rozszerzający 1 wejście analogowe, 1 wyjście cyfrowe. Wyprodukowano dla

Architektura systemów komputerowych Laboratorium 13 Symulator SMS32 Operacje na bitach

Protokół komunikacyjny sondy cyfrowej CS-26/RS-485 (lub RS-232)

ARCHITEKRURA KOMPUTERÓW Kodowanie liczb ze znakiem

Zewnętrzne układy peryferyjne cz. 1 Wykład 12

Wstęp do informatyki- wykład 1 Systemy liczbowe

Kod produktu: MP01105

Stan wysoki (H) i stan niski (L)

Programowanie Mikrokontrolerów

Adresowanie obiektów. Adresowanie bitów. Adresowanie bajtów i słów. Adresowanie bajtów i słów. Adresowanie timerów i liczników. Adresowanie timerów

Mikroprocesory i Mikrosterowniki Laboratorium

Enkoder magnetyczny AS5040.

Mikroprocesory i Mikrosterowniki Magistrala szeregowa I2C / TWI Inter-Integrated Circuit Two Wire Interface

3.2. Zegar/kalendarz z pamięcią statyczną RAM 256 x 8

Przykładowe pytania DSP 1

Inż. Kamil Kujawski Inż. Krzysztof Krefta. Wykład w ramach zajęć Akademia ETI

Opis procedur asemblera AVR

Komunikacja w mikrokontrolerach. Magistrala szeregowa I2C / TWI Inter-Integrated Circuit Two Wire Interface

ĆWICZENIE 5. TEMAT: OBSŁUGA PORTU SZEREGOWEGO W PAKIECIE KEILuVISON WYSYŁANIE PORTEM SZEREGOWYM

Pracownia Komputerowa wykład IV

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

Opis czytnika TRD-FLAT 2LN ver Naścienny czytnik transponderów UNIQUE w płaskiej obudowie

MODBUS RTU wersja M1.14 protokół komunikacyjny wyświetlaczy LDN

Ultradźwiękowy generator mocy MARP wersja Dokumentacja techniczno-ruchowa

Interfejsy komunikacyjne pomiary sygnałów losowych i pseudolosowych. Instrukcja do ćwiczenia laboratoryjnego

LICZNIKI Liczniki scalone serii 749x

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

4 Transmisja szeregowa, obsługa wyświetlacza LCD.

4. Karta modułu Slave

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Kod produktu: MP01105T

THP-100-x parametry. Pobór prądu (przy zasilaniu 12V) Pobierana moc (przy zasilaniu 12V) 0,036W. Pomiar ciśnienia

Protokół Modbus RTU / Sieć RS-485

Detekcja i korekcja błędów w transmisji cyfrowej

Kod znak-moduł. Wartość liczby wynosi. Reprezentacja liczb w kodzie ZM w 8-bitowym formacie:

Komunikacja z czujnikiem

Mini Modbus 1AO. Moduł rozszerzający 1 wyjście analogowe, 2 wyjście cyfrowe. Wyprodukowano dla

Szkolenia specjalistyczne

2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0,

Opis układów wykorzystanych w aplikacji

Operacje arytmetyczne

Materiały dodatkowe Krótka charakterystyka protokołu MODBUS

Pracownia Komputerowa wyk ad IV

1259 (10) = 1 * * * * 100 = 1 * * * *1

Tranzystor JFET i MOSFET zas. działania

Aby w pełni przetestować układ o trzech wejściach IN_0, IN_1 i IN_2 chcemy wygenerować wszystkie możliwe kombinacje sygnałów wejściowych.

Transkrypt:

Magistrala 1-wire Magistrala 1-wire składa się z pojedynczej linii. Na magistrali 1-wire jedno urządzenie MASTER nadzoruje pracę jednego lub wielu urządzeń SLAVE. Urządzenie MASTER oraz wszystkie SLAVE są podłączone do magistrali wyjściem tranzystora otwarty dren lub bramką trójstanową. Takie podłączenie umożliwia zwolnienie linii przez każde z urządzeń po zakończeniu transmisji. Magistrala 1-wire wymaga zewnętrznego rezystora podciągającego do zasilania o wartości około 5kΩ. Stanem bezczynnym magistrali jest stan wysoki.

Termometr cyfrowy DS18B20 obudowy i wyprowadzenia Układ DS18B20 zawiera czujnik temperatury i przetwornik A/C o rozdzielczości 12-sto bitowej, co odpowiada pomiarowi temperatury z krokiem 0.0625 C.

DS18B20 zasilanie pasożytnicze Układ DS1820 może pracowaćbez zewnętrznego źródła zasilania. Moc jest dostarczana przez rezystor podwieszający pod zasilanie linię danych DQ. W stanie wysokim linii DQ ładowany jest wewnętrzny kondensator C pp który dostarcza energii urządzeniu, gdy linia danych DQ jest w stanie niskim. Ten sposób zasilania magistrali zwany jest pasożytniczym.

DS18B20 zasilanie zewnętrzne Ukłda DS1820 może być również zasilany ze źródła zewnętrznego

DS18B20 port 3-stanowy Magistrala 1-wire ma tylko jedną linię(dq). Każde urządzenie (master lub slave) podłącza się do tej linii przez wyjście otwarty kolektor tranzystora lub bramkętrój-stanową. Takie rozwiązanie umożliwia każdemu urządzeniu które nie nadaje zwolnienie magistrali, która może byćużywana przez inne podłączone urządzenie.

Urządzenia na magistrali 1-wire W układach cyfrowych wyjście wielko-impedancyjne (zwane równieżhi-z, wyjście trój-stanowe lub wyjście pływające ) nie ma żadnego wymuszonego stanu logicznego (poziom sygnału nie jest określany przez obwody wyjściowe). Podłączone do wyjścia nisko-impedancyjnego nie obciąży go, a jego stan logiczny przyjmie wartośćstanu układu, do którego zostanie podłączony.

DS18B20 - schemat

DS18B20 pamięci RAM i EEPROM Pamięć układu DS18B20 składa się z 8-miu rejestrów, temperatura jest zapisywana na dwóch pierwszych rejestrach: 0-wy rejestr zawiera młodszy bajt pomiaru temperatury, 1-szy rejestr zawiera starszy bajt pomiaru temperatury. Podczas transmisji na magistrali dane są nadawane począwszy od najmłodszego bitu. Rejestr 0-wy jest wysyłany przez DS18B20 jako pierwszy.

Rejestr temperatury Rejestr temperatury (LS byte) Bit 7 6 5 4 3 2 1 0 Nazwa 2 3 2 2 2 1 2 0 2-1 2-2 2-3 2-4 Rejestr temperatury (MS byte) Bit 15 14 13 12 11 10 9 8 Nazwa S S S S S 2 6 2 5 2 4 S bity znaku

Odczyt temperatury w rozdzielczości 8-bitowej Wynik pomiaru temperatury jest przekazywany przez termometr w rozdzielczości 12- bitowej na bajtach LS i MS. Ograniczenie rozdzielczości do 8-bitowej ( =1 ) polega na usunięciu bitów: 2-1, 2-2, 2-3, 2-4. W tym celu bajty LS i MS należy odpowiednio obrócić, po czym zsumować je binarnie i uzyskać na bajcie wynikowym następujący układ bitów: 0 2 6 2 5 2 4 2 3 2 2 2 1 2 0 Bajt wynikowy zawiera temperaturę w zapisie binarnym o rozdzielczości 8-bitowej. Przed wyświetleniem na LCD liczbę binarną należy rozłożyć na kolumny (setki, dziesiątki, jedności) i zapisać każdą kolumnę w kodzie ASCII.

Odczyt temperatury w rozdzielczości 12-bitowej Usunięte poprzednio bity części ułamkowych temperatury 2-1, 2-2, 2-3, 2-4 należy zapisać na oddzielnej zmiennej. Rozdzielczość 12-bitowa jest równa 1/16 = 0,0625. Z porównania kolumn liczb w zapisie dwójkowym i dziesiętnym a4 a3 a2 a1 b4 b3 b2 b1 + + + = + + + 16 8 4 2 10000 1000 100 10 625 1 ( a + 2a3 + 4a2 + 8a1) = (1000b 1 + 100b2 + 10b3 + 10000 10000 4 b4 wynika, że kolumnę części dziesiętnych b 1 można obliczyć mnożąc liczbę przez 625, a następnie wyznaczając część całkowitą z podziału przez 1000. Wyznacz kolumny części dziesiętnych, setnych, tysiącznych i dziesięciotysięcznych, każdą z nich przedstaw w kodzie ASCII i wyświetl na LCD. )

DS18B20 pamięci ROM Transmisja następuje od LSB do MSB ( od prawej do lewej)

DS18B20 rejestr konfiguracyjny Rejestr konfiguracyjny pozwala wybraćrozdzielczość(defaultowa po resecie jest 12-bitowa). Czas pomiaru temperatury jest odwrotnie proporcjonalny do rozdzielczości

Impuls Resetu i obecności Każdy transfer po magistrali rozpoczyna się od impulsu Resetu nadawanego przez urządzenie MASTER i impulsu obecności, który jest odpowiedzią urządzenia SLAVE. W czasie impulsu Resetu MASTER zwiera magistralę do masy na czas co najmniej 480 µs. Po tym czasie MASTER zwalnia magistralę, która wskutek podciągnięcia rezystorem 5k przechodzi w stan wysoki. SLAVE dokonuje detekcji zbocza narastającego, czeka 15 60 µs, po czym nadaje impuls obecności zwierając magistralę do masy na czas 60 240 µs.

Impuls Resetu i obecności procedura uproszczona Mikrokontrolery nie posiadają interfejsu do magistrali 1-wire. W związku z tym magistralę 1-wire można umieścić na dowolnej linii mikrokontrolera np. 5 linia portu B. Wówczas na liniach portu D można umieścić 8 diod pomocniczych w uruchamianiu programu. Definicja impulsu resetu zawiera opis kształtu impulsu przedstawiony na rysunku (w przykładzie pomijamy odczyt impulsu obecności) void reset (void) { //magistrala 1-wire jako output //magistrala 1-wire w stan wysoki //odczekaj 5us //magistrala w stan niski //odczekaj 500us //magistrala w stan wysoki //odczekaj 500us pomijamy odczyt impulsu obecności }

Impuls Resetu i obecności W tym rozwiniętym przykładzie MASTER nadaje impuls reset i odczytuje impuls obecności void reset (void) { //magistrala 1-wire jako output //magistrala 1-wire w stan wysoki //odczekaj 5us czas nie restrykcyjny //magistrala w stan niski //odczekaj 500us //magistrala w stan wysoki //odczekaj 60us //magistrala jako wejście //podwieszenie wejścia (magistrali) pod zasilanie (wewnetrzne) //odczyt stanu magistrali //if( stan magistrali == HIGH) //SLAVE nieobecny (wyświetl tekst) //else // SLAVE obecny (wyświetl tekst) //odczekaj 500us //magistrala 1-wire jako output //magistrala 1-wire w stan wysoki }

Ramka nadawcza Stany logiczne: 0 i 1 są nadawane w ramkach czasowych. Każda ramka czasowa trwa co najmniej 60 µs, z odstępem między ramkami co najmniej 1µs. Rysunek przedstawia ramki obu stanów logicznych obie ramki rozpoczynają się od zbocza opadającego.

Impulsy stanów logicznych Definicja impulsu stanu logicznego 0 (lewa połowa rysunku z poprzedniego slajdu) void impuls0 (void) { //magistrala 1-wire jako output //magistrala 1-wire w stan wysoki //odczekaj 5us //magistrala w stan niski //odczekaj 80us //magistrala w stan wysoki //odczekaj 10us } Definicja impulsu stanu logicznego 1 (prawa połowa rysunku z poprzedniego slajdu) void impuls1 (void) {//do samodzielnego wypełnienia wg. rysunku }

Procedura nadania bajtu (8 bitów) Bajt nadajemy bit po bicie rozpoczynając od najmłodszego bitu, czyli przez obrót bajtu w prawo void nadaj (char A) { //magistrala 1-wire jako output //magistrala 1-wire w stan wysoki for (..) //8 obrotów pętli dla 8-miu bitów { if (selekcja najmłodszego bitu zmiennej A) ) impuls1(); //impuls logicznej else impuls0(); //impuls logicznego 0. //obrót bajtu w prawo } //sprawdzenie wartości najmłodszego bitu }

Ramka odbiorcza MASTER generuje zbocze opadające i podtrzymuje stan niski co najmniej przez 1 µs, po czym zwalnia magistralę, która wskutek powieszenia przechodzi w stan wysoki. Teraz SLAVE może zewrzeć magistralę do masy (gdy nadaje logiczne 0 ) lub pozostawić ją w stanie wysokim (gdy nadaje logiczną 1). MASTER odczytuje stan magistrali przed upływem 15 µs od rozpoczęcia ramki.

Procedura odbioru bajtu (8 bitów) Bajt odbieramy bit po bicie wsuwając bity przychodzące po magistrali na najstarszą (7-mą) pozycję zmiennej B i obracając zmienną B w prawo char odbierz (void) { for (.) //8 obrotów pętli dla 8-miu bitów { B=B>>1; //obrót bajtu w prawo //magistrala 1-wire jako output //magistrala 1-wire w stan wysoki //5us //magistrala 1-wire w stan niski //5us //magistrala 1-wire jako input //magistrala 1-wire podwieszona do zasilania (wewnętrznie) //10us if (.) //odczyt stanu magistrali B = 0b10000000; //odebrano stan 1 else. //odebrano stan 0 //delay. us } //magistrala 1-wire jako output //magistrala 1-wire w stan wysoki return..; }

Komendy adresowane do pamięci ROM

Komendy adresowane do pamięci scratchpad

Sesja komunikacyjna po magistrali 1-wire z termometrem DS18B20 TRYB URZĄDZENIA MASTER DANE (NAMŁODSZY BIT JAKO 1-SZY) KOMENTARZ TX Impuls resetu Master generuje impuls resetu RX Impuls obecności DS18B20 odpowiada impulsem obecności TX $CC Master wydaje rozkaz pominięcia odczytu pamięci ROM TX $44 Master wydaje rozkaz pomiaru temperatury TX Podciągnięcie linii Master utrzymuje magistralę w stanie wysokim czas pomiaru = 1000ms TX Impuls resetu Master generuje impuls resetu RX Impuls obecności DS18B20 odpowiada impulsem obecności TX $CC Master wydaje rozkaz pominięcia odczytu pamięci ROM TX $BE Master wydaje rozkaz odczytu pamięci RAM urządzenia RX Odczyt 2-ch słów Master odczytuje wynik pomiaru temperatury

Search ROM Command (F0H) Komenda F0H (search ROM) pozwala odczytać numery identyfikacyjne urządzeń na magistrali (przy założeniu, że na magistrali jest więcej niż jedno urządzenie) Wszystkie urządzenia ma magistrali mają wyjścia typu otwarty kolektor. Po podłączeniu tych urządzeń do jednej linii (1-wire) stan magistrali jest wynikiem hardwarowej operacji logicznej AND (koniunkcja hardwarowa). Proces rozpoczyna się następująco: - wszystkie urządzenia wysyłają na magistralę bity LSB rejestru ROM - master odczytuje wynik koniunkcji bitów LSB wszystkich urządzeń - wszystkie urządzenia wysyłają na magistralę negację bitu LSB rejestru ROM - master odczytuje wynik koniunkcji negacji bitów LSB wszystkich urządzeń - master podejmuje decyzję wg tabeli - master zapisuje na magistrali pożądaną wartość bitu LSB - tym samym wydaje rozkaz przejścia w stan high-z urządzeniom o niezgodnym bicie LSB - itd. do bitu 63 (MSB). W powyższym procesie master odczytuje numer jednego urządzenia. Następnie urządzenie już odczytane przechodzi w stan high-z, a proces zaczyna się ponownie dla urządzeń o numerach jeszcze nie odczytanych.

Search ROM Command (F0H) przykład Device 1: xxxxx10101100 Device 2: xxxxx01010101 Device 3: xxxxx10101111 Device 4: xxxxx10010000 bity koniunkcja bitów koniunkcja negacji bitów wniosek decyzja Urządzenia aktywne: 1-4 LSB: 0110 0 0 Sązera i jedynki Urządzenia 2 i 3 odłączają się(high-z) Urządzenia aktywne: 1 i 4 Bity: 00 0 1 Sąsame zera Żadne z urządzeńnie odłącza się Urządzenia aktywne: 1 i 4 Bity: 10 0 0 Sązera i jedynki Urządzenie 1 odłącza się Urządzenie aktywne: 4 Bit: 0 0 1 Bit równy zero Urządzenie aktywne: 4 Bit: 1 1 0 Bit równy jeden Itd. do końca Odczytano numer seryjny urządzenia 4 Urządzenia 4 przechodzi w stan high-z, a pozostałe uczestniczą w kolejnym przebiegu Kolejne urządzenia przechodzą w stan high-z, aż do ostatniego urządzenia

Library functions // wykonaj reset magistrali (wymiana impulsów resetu i obecności na dzień dobry ) uint8_t reset(void); // zaadresuj urządzenie na magistrali o numerze ROM podanym w tablicy rom[8], komenda 0x55 void select(const uint8_t rom[8]); // Pomiń adresowanie urządzenia na magistrali, można stosować tylko, gdy na magistrali znajduje się jedno urządzenie, komenda 0xCC void skip(void); //Wyślij na magistralę 1 bajt (parametr v), parametr power wskazuje, czy po wysłaniu bajtu v magistrala ma przejść w stan wielkiej impedancji (power =0), czy pozostać w stanie wysokim i pobierać energie (power = 1) void write(uint8_t v, uint8_t power = 0); void write_bytes(const uint8_t *buf, uint16_t count, bool power = 0); // Odczytaj jeden bajt uint8_t read(void); void read_bytes(uint8_t *buf, uint16_t count);

Library functions // Reset stanu poszukiwania urządzeń na magistrali void reset_search(); // Odczyt kodu rodzinnego urządzenia kod zostaje zapisany w zmiennej family_code void target_search(uint8_t family_code); // Poszukuje urządzeń na magistrali // Odczytuje po 1-wire 8 bajtów numeru urządzenia z pamięci ROM i zapisuje do tablicy // wskazanej przez *newaddr, zwraca 1 jeśli znaleziono nowe urządzenie na magistrali, // zwraca 0, jeśli brak urządzeń lub numery ROM wszystkich urządzeń // zostały już odczytane, parametr search_mode = 0 wywołuje komendę 0xF0, // search_mode=1 wywołuje komendę 0xEC uint8_t search(uint8_t *newaddr, bool search_mode = true); // Oblicza Dallas Semiconductor 8bit CRC, rozpoczynając od bajtu *addr, dla len bajtów, static uint8_t crc8(const uint8_t *addr, uint8_t len);

#include <OneWire.h> OneWire ds(10); //utworzenie egzemplarza klasy OneWire byte addr[8]; ds.search(addr); if (ds.crc8(addr, 7)!= addr[7])... ; ds.reset(); ds.select(addr); // start conversion, with parasite power on at the end ds.write(0x44, 1); delay(1000); // maybe 750ms is enough, maybe not ds.reset(); ds.select(addr); ds.write(0xbe); // Read Scratchpad for ( i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); Serial.println(data[i], HEX);} Serial.print(" CRC="); Serial.print(OneWire::crc8(data, 8), HEX); Serial.println(); int16_t raw = (data[1] << 8) data[0]; celsius = (float)raw / 16.0; Serial.print(" Temperature = "); Serial.print(celsius); Serial.print(" Celsius, ");

DS2430 256-bit 1wire EEPROM Główne sekcje pamięci DS2430 256-bit 1wire EEPROM: - 64-bitowa pamięć ROM (laserowo wypalona) - 256-bitowa pamięć danych EEPROM - 256-bitowy pamięć tymczasowa (pośredniczy przy zapisie i odczycie z EEPROM) - 64-bitowy rejestr aplikacji jednokrotnie programowalny - 64-bitowa pamięć tymczasowa (pośredniczy przy zapisie rejestru aplikacji) - 8-bitowy rejestr statusowy (status rejestru aplikacji: zapisany/nie zapisany) Main memory sections: - 64-bit lasered ROM - 256-bit data memory - 256-bit scratchpad - 64-bit OTP application register (OTP- One Time Programmable) - 64-bit scratchpad - 8-bit status memory

Schemat blokowy układu DS2430

DS2430 mapa pamięci

Komendy DS2430

DS2430 pamięć ROM Master musi najpierw wysłaćjednąz komend adresowanych do pamięci ROM (Read ROM, Match ROM, Search ROM lub Skip ROM). Po wykonaniu komendy ROM Master może wydawać komendy adresowane do innych pamięci

Komendy adresowane do pamięci ROM

DS2430 - algorytm zapisu i odczytu pamięci

DS2430 przykłady użycia komend

AM2302 (DHT22) moduł temperatury i wilgotności

AM2302 (DHT22) protokół i przykład

1-wire IButton

CRC - Cyclic Redundancy Code CRC (Cyclic Redundancy Code) jest resztą z dzielenia wielomianów: dzielnik i dzielna są traktowane jako ciągi (liczby) binarne, dzielenia następuje wg. zasad arytmetyki binarnej modulo 2, wynik dzielenia jest nieistotny (pomijany), reszta z dzielenia (CRC) jest dopisywana do ciągu przesyłanych danych Odbiornik dzieli otrzymany ciąg z dołączonym CRC przez ten sam wielomian, jeśli wynik dzielenia jest różny od zera, to w transmisji wystąpiłbłąd. Obliczenia CRC mogą być: stablicowane lub wykonywane na bazie procedur.

Arytmetyka binarna modulo 2 W arytmetyce binarnej dodawanie i odejmowanie modulo dwa są wykonywane bez przeniesienia suma różnica 10011011 10011011 +11001010 11001010 01010001 01010001 0 0 = 0 0 1 = 1 1 0 = 1 1 1 = 0 W arytmetyce binarnej modulo 2 suma i różnica są dają identyczny rezultat. Z tego powodu nie można tradycyjnie porównywać liczb pod względem relacji większa/mniejsza. Liczba X jest większa lub równa liczbie Y jeżeli pozycja najstarszego bitu liczby X jest taka sama lub większa niż pozycja najstarszego bitu Y. np. 101 jest mniejsze niż 1010

Przykład dzielenia w arytmetyce binarnej modulo dwa

DS18B20 wielomian CRC Ciąg danych: 1010101010101010101010 Dzielimy przez wielomian 100110001 W tym celu ciąg danych uzupełniamy o 8 zer 101010101010101010101000000000 100110001 liczymy sumę modulo 2 0011001000 100110001 liczymy sumę modulo 2 1111110011 100110001 liczymy sumę modulo 2 itd. aż do uzyskania 8-bitowej reszty z dzielenia

Nadajnik transmituje bity danych uzupełnione o bity reszty z dzielenia wielomianów CRC8 lub CRC16 CRC 8 =x 8 +x 5 +x 4 +1 100110001 = 0x31 CRC 16 =x 16 +x 15 +x 2 +1 11000000000000101=0x8005 Wybiera się takie wielomiany, dla których rozkład 0 i 1 wielomianu oraz wielokrotności wielomianu nie przypomina rozkładu szumu (równomiernego) Odbiornik dzieli otrzymany ciąg łącznie z bitami reszty CRC przez ten sam wielomian CRC 8 (lub CRC 16 ). Jeżeli reszta z dzielenia =0, ciąg nie został przekłamany.

Generator hardwarowy CRC16 i CRC8

unsigned int crc16(unsigned char c) { unsigned int crc, j; for (j=0; j<8; j++) { if ((crc^(unsigned int) c) & 0x0001) { crc = (crc ^ 0x8005); } else; crc = crc >>1; c = c >> 1; } return crc; } //////////////////////////////////////////////////////////////////////////////////////////////// int main(void) { unsigned char ciag[15]; unsigned int i, oblcrc; ciag[0] = 'H'; ciag[1] = '1';. crc=0; for (i=0; i<12; i++) { oblcrc = crc16(ciag[i]); } return 0; }

CRC 8 =x 8 +x 5 +x 4 +1 100110001 W odwrotnym porządku bitów 10001100 = 0x8c uint8_t OneWire::crc8(const uint8_t *addr, uint8_t len) { uint8_t crc = 0; } while (len--) { } return crc; uint8_t inbyte = *addr++; for (uint8_t i = 8; i; i--) } { uint8_t mix = (crc ^ inbyte) & 0x01; crc >>= 1; if (mix) crc ^= 0x8C; inbyte >>= 1;