W ramach nauki napisałem testowy kod do odczytu wartości sygnału PWM, wysyłanego np. przez odbiorniki modelarskie. Program działa bardzo ładnie, także przy różnych źródłach i częstotliwościach taktowania. Trzeba tylko uważać, aby timer nie pracował w zakresie zbyt bliskim zakresu zmiennych (int16_t), bo wtedy czasem występuje przepełnienie licznika. W sumie nie wiem dlaczego, ale może zdarza się, że ICP nie wyłapie poprawnie zbocza opadającego. To jednak zasadniczo nieistotne. Jeśli trzyma się wartości licznika w rozsądnych granicach, takie zachowanie nie występuje wcale.
Kod załączam poniżej - może komuś się przyda, a jednocześnie proszę o uwagi i komentarze. Na pewno coś można zrobić lepiej / szybciej, a dla mnie okazja do nauki.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Planuję napisać podobny program, ale z wykorzystaniem zwykłych przerwań zewnętrznych - tak by działał na ATtiny, które we większości nie mają ICP. Jakieś sugestie jak podejść to takiego zadania? Wydaje się to w miarę proste, choć prawdopodobnie dokładność pomiaru będzie mniejsza.