Mam problem z napisaniem programu rozpoznającego stany w sieci.
Na wejście INT0 procesora podpiąłem sygnał z sieci 1Wire. Chciałbym rozpoznać trzy stany w sieci:
- reset (czyli ściągnięcie linii danych do 0 na 480us)
- nadanie 0 - (czyli 10us stan niski, 80us stan wysoki)
- nadanie 1 - (czyli 80us stan niski, 10us stan wysoki)
0 i 1 następują po sobie, więc z nimi można sobie poradzić bez przerwań (gdy wystąpi stan niski - odczytać stan po 50us), problem jest tylko z stanem reset. Trzebaby zerować timer przy każdym opadającym zboczu, a przy narastającym sprawdzać czy czas stanu niskiego mieści się w granicach 450-550us. Można to jakoś zrealizować programowo (tak by jednocześnie czytać / nadawać do sieci - czyli nie zjadając cennych mikrosekund pracy procesora)? A może da się to jakoś prościej rozwiązać?
Procesor (ATMEGA8) z zewnętrznym rezonatorem 8MHz.
Na wejście INT0 procesora podpiąłem sygnał z sieci 1Wire. Chciałbym rozpoznać trzy stany w sieci:
- reset (czyli ściągnięcie linii danych do 0 na 480us)
- nadanie 0 - (czyli 10us stan niski, 80us stan wysoki)
- nadanie 1 - (czyli 80us stan niski, 10us stan wysoki)
0 i 1 następują po sobie, więc z nimi można sobie poradzić bez przerwań (gdy wystąpi stan niski - odczytać stan po 50us), problem jest tylko z stanem reset. Trzebaby zerować timer przy każdym opadającym zboczu, a przy narastającym sprawdzać czy czas stanu niskiego mieści się w granicach 450-550us. Można to jakoś zrealizować programowo (tak by jednocześnie czytać / nadawać do sieci - czyli nie zjadając cennych mikrosekund pracy procesora)? A może da się to jakoś prościej rozwiązać?
Procesor (ATMEGA8) z zewnętrznym rezonatorem 8MHz.