Emulowane urządzenia 1-przewodowe

10

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.

RSM
źródło
@Gerben - Znalazłem to wcześniej podczas wyszukiwania. Przejrzałam przez to. Byłem jednak zaniepokojony, ponieważ wystąpiły pewne błędy, mimo że rozwiązane, nie znam niezawodności. Również projekty przeciwników przy użyciu niestandardowych niewolników nie wydawały się powszechne, stąd pytanie powyżej.
RSM
Wydaje się, że biblioteka to obsługuje. Oto biblioteka specjalnie do tego, jak sądzę. Szybkość wydaje się wynosić około 15 kb / s. Myślę, że szybkość procesora tak naprawdę nie ma znaczenia, ale to zależy od biblioteki. Jeśli nie jest zasilany bateryjnie, po prostu uruchom go na częstotliwości 8 MHz lub 16 MHz i powinno być dobrze.
Gerben,
@Gerben Przetestuję bibliotekę, aby zobaczyć, jak działa. Wciąż nie rozumiem, dlaczego tak często zdarza się, że nie używa się jednego niewolnika?
RSM,
@RSM Powinieneś sprawdzić tę bibliotekę github.com/MarkusLange/OneWireSlave
Ryu_hayabusa

Odpowiedzi:

3

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).

Youen
źródło
Wygląda na to, że repozytorium zostało przeniesione do gitea.youb.fr/youen/OneWireArduinoSlave
Jonas Berlin
1
@JonasBerlin Rzeczywiście, przeniosłem repozytorium (właśnie edytowałem odpowiedź, aby to odzwierciedlić). Na wszelki wypadek zostawiam stary link jako kopię zapasową i jako odniesienie do znalezienia innych osób na forach GitHub.
youen
Czy może problemy powinny zostać skopiowane?
Jonas Berlin