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.
Sławomir Skrzyński, EP