Chcę, aby układ ATTiny stał się niewolnikiem na magistrali 1-wire, z własnym sygnałem S / N i listą poleceń dla określonych funkcji.
Chcę wiedzieć, czy mogę użyć biblioteki One Wire z witryny arduino do wysyłania danych jako slave.
Na przykład, możesz mieć niewolnika w jednym pomieszczeniu z wieloma rodzajami czujników, które zgłaszałyby się do mistrza na żądanie, lub kapitan może mu nakazać sterowanie czymś w rodzaju żaluzji.
Pytanie Czy musiałbym monitorować linię magistrali i odpowiadać na żądania od urządzenia głównego, a także brać pod uwagę sposób, w jaki normalny czujnik wysyła dane? Na jakiej częstotliwości powinienem uruchomić slave, aby uzyskać najlepszą funkcjonalność?
Uwaga: nie użyję pasożytniczej mocy.
Odpowiedzi:
O ile mi wiadomo, 1-przewodowa biblioteka, którą podłączyłeś w swoim pytaniu, pozwala działać tylko jako master, a nie slave.
Właśnie wydałem bibliotekę, aby zamienić tablicę Arduino w 1-przewodowego niewolnika, tutaj:
https://github.com/neuoy/OneWireArduinoSlave(edycja: przeniesiono tutaj https://gitea.youb.fr/youen/OneWireArduinoSlave ). Używam go w moim niestandardowym systemie automatyki domowej i działa bezbłędnie w mojej konfiguracji (1-wire master, DS9490R, jest podłączony do laptopa przez USB, a także zapewnia zasilanie Arduino, które jest Arduino Uno). Biblioteka obsługuje szczegóły niskiego poziomu: dopasuj rom, bajt wysyłaj i odbieraj (co w rzeczywistości jest dość trudne do poprawnego, najczęściej niemożliwe bez analizatora logicznego). Reszta zależy od ciebie.Jest w pełni zaimplementowany z przerwaniami, cała komunikacja odbywa się w tle, możesz wykonywać inny kod jak zwykle, równolegle, i powiadamiane są przez wywołania zwrotne po odebraniu bajtów itp. Wysyłanie bajtów do mastera jest również asynchroniczne.
Wiem też, że istnieje co najmniej jedna inna biblioteka, https://github.com/MarkusLange/OneWireSlave , jak to skomentował Ryu_hayabusa. Nie działało to dla mnie (nie wiem, czy to z powodu mojej konfiguracji sprzętu, czy z innego powodu), ale na pewno działa dla innych, więc też warto spróbować. Wygląda na to, że ta biblioteka nie jest zaimplementowana z przerwaniami, więc twój program jest blokowany podczas oczekiwania na aktywność master (co jest całkowicie dopuszczalne w wielu scenariuszach).
źródło