Emulator termometru może się przydać, gdy budujemy sterownik pieca CO, pralki, klimatyzacji czy lodówki. Urządzenie jest także doskonałym projektem referencyjnym, jeśli planujemy wykonanie sensora z interfejsem 1-Wire. Pamiętajmy jednak, że komercyjne wykorzystanie projektu może wiązać się z naruszeniem praw patentowych firmy Maxim-Dallas.
Schemat ideowy emulatora pokazano na rysunku 1. Jak można zauważyć już na pierwszy rzut oka, jest to jedno z tych urządzeń, których „moc” tkwi w oprogramowaniu. Nie jest łatwo wykonać emulator urządzenia dołączanego za pomocą 1-Wire. Kryteria czasowe protokołu komunikacyjnego są dość restrykcyjne. Więcej na ten temat napisałem w artykule „1-Wire emulator & skaner”, który wkrótce ukaże się na łamach EP. Tu jedynie zasygnalizuję, że na czas analizowania sygnału reset i generowania sygnału presence obsługa przerwań prawie nie jest zawieszana (rysunek 2). Przerwa w realizacji programu głównego podczas oczekiwania na reset jest spowodowana oczekiwaniem na opadające zbocze impulsu reset. Procedurę można udoskonalić i po wykryciu poziomu niskiego trwającego ponad 460 ms włączyć przerwanie od zbocza narastającego na wejściu INT. W tej wersji oprogramowania nie zdecydowałem się na to, ponieważ program główny i tak prawie nic nie robi. W czasie generowania „zera” przerwania też nie są zawieszane (rysunek 3).
Schemat montażowy emulatora pokazano na rysunku 4. Emulator nie wymaga uruchamiania. Przy wgrywaniu programu do mikrokontrolera trzeba odpowiednio ustawić bity konfiguracyjne – rysunek 5. Jeśli chcemy przyłączyć kilka emulatorów do jednej magistrali, to trzeba pamiętać, aby dla każdego z nich skompilować kod z innym numerem identyfikacyjnym. Zakładając zworkę na piny 4–6 złącza J2, emulujemy pasożytnicze zasilanie termometru.W czasie odczytu bitu IRQ są zawieszane na około 6 ms i biorąc pod uwagę, że wejście i wyjście w obsługę przerwania to około 5 ms, zastąpienie _delay_us(15-DELAYDAMPLEBIT), gdzie DELAYDAMPLEBIT=8 (tyle wynosi czas od wejścia w IRQ do skoku w funkcję odczytu bitu), niepotrzebnie komplikuje kod, nie dając wymiernego zysku czasowego.