Witam.
Przerabiam właśnie rozdział dotyczący podczerwieni w Bluebooku. Postanowiłem dość "dogłębnie" przeanalizować kody dla lepszego zrozumienia co po kolei się w nim dzieje. Nie jest źle
bo w zasadzie większość zdołałem ogarnąć. Intryguje mnie tylko jedna rzecz.
Otóż w obsłudze przerwania ICP obliczana jest szerokość impulsu:
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Zmienne PulseWidth i LastCapture są typu int16 bez znaku.
Timer1 w trybie ICP, z tego co zrozumiałem z noty, pracuje na zasadzie zliczania w górę od zera do 65536. W chwili wystąpienia zbocza na wejściu ICP do rejestru ICR1 wpisywana jest aktualna wartość z TCNT1.
Moje pytanie dotyczy sytuacji kiedy liczymy szerokość impulsu i np. zmienna Last Capture z poprzedniego przerwania wyniosła 65000, Timer1 zliczyl 889us (z założeniem zegara 8 MHz) i nastąpiło kolejne wykrycie zbocza. W związku z tym do ICR1 zostanie wpisana wartość 353 (Timer1 doliczył z 65000 do końca, wyzerował się i liczył dalej). Jaki będzie zatem wynik wyrażenia ICR1 - LastCapture (353 -65000) ? Nie będzie to liczba ujemna bo typ zmiennej jest unsigned. Jak wpływa to na przebieg kodu ? Czy w tej sytuacji ramka zostanie odrzucona i procedura się powtórzy ale z kolejnymi już prawidłowymi wartościami PulseWidth i LastCapture ?
Dziękuję i pozdrawiam.