Witam!
Musze używać magistrali 1-Wire na AVR. Mam jednak następujące założenia:
1) Procedury 1-Wire nie mogą być aktywnie czekające w głównej pętli, bo ta pętla ma co robić i robi to w dodatku niestabilnie czasowo. 2) W systemie jest już sporo przerwań (UART,Timer,Ext) które są ważniejsze od 1-Wire (na którym jest mało ważny miernik temperatury, ale być musi). 3) 1-Wire jest nie dość, że strasznie czuły na czasy to w dodatku sa to czasy krótkie (15us to krócej niż 256 cykli zegara 14MHz - konkretnie 17us - więc timery się komplikują). 4) Wszystkie biblioteki jake znalazłem w necie sa aktywnie czekające w głównej pętli. 5) Stosowanie dodatkowych scalaków jest chwilowo bez sensu, nawet jeśli będa kosztowac 3zł/sztuka (ATTiny/etc).No i co teraz ;) ?
Wykoncypowałem tak:
Wykorzystam jakiś timer, który jest skrócony (np. pi razy oko 5us) - TIMER2 ma taką funkcję w ATMega8. W przerwaniu zaimplementuje cały proces slotów Wite1/Read1 albo Write0/Read0 czy Reset. Główny program bedzie zlecał przerwaniom wykonanie tego pojedynczego elementu. Reszta algorytmu (wybieranie poszczególnych bitów) zrealizuje już z głownej pętli.
Najwazniejsze elementy do przeskoczenia to chyba stałośc czasów dla
1-Wire jednocześnie bez mocnego blokowania pozostałych przerwań. (przerwanie 1-Wire było by jedynym nieprzerywalnym, reszta może byc przerwana).No i teraz pytanie:
a) Czy istnieje taka biblioteka już napisana - nie mam po co robić, jesli jest gotowe. b) Czy mogę pomiędzy poszczególnymi slotami dawać dowolnie długie przerwy (nie mam zasilania z lini danych dla miernika temp, normalnie przez Vcc) ? c) Czy mam słuszną koncepcję ;) ?