Witam.
Od dłuższego czasu mam problem z precyzyjnym obliczaniem czasu generowanego z timerów. Przejrzałem sporo forów i innych poradników, ale co temat to inne obliczenia.
Na początku trafiłem na taki schemat. Że częstotliwość z zegara w przypadku tim2 jest to 86Mhz jest dzielona przez TIM_ClockDivision, następnie przez Prescaler, a potem dobiera się okres sygnału czyli TIM_Period.
Ale z tego nic mi nie wychodzi mądrego.
Druga podpowiedź to że częstotliwość generowanego sygnału, to wynik częstotliwości zegara podzielonej przez iloczyn Prescalera i Period.
Ta opcja wydaje się bardziej prawdopodobna, ponieważ w przeciwieństwie do pierwszego przypadku uzyskuję coś zbliżonego do mojego wyniku. Sprawdzam to na programie zapalającym diodę i staram się uzyskać 1 Hz. W przypadku drugiej metody dobierając Prescaler = 40000 i Period 500 uzyskuję z obliczeń uzyskuję 2,15 Hz a z obserwacji coś około 0,8 Hz.
Pierwszą metodę sprawdzałem też na oscyloskopie i wyniki w ogóle się nie pokrywały.
Kod do sprawdzania.
Będę wdzięczny jeżeli ktoś wskaże mi miejsce w którym robię błąd.
Pozdrawiam
Od dłuższego czasu mam problem z precyzyjnym obliczaniem czasu generowanego z timerów. Przejrzałem sporo forów i innych poradników, ale co temat to inne obliczenia.
Na początku trafiłem na taki schemat. Że częstotliwość z zegara w przypadku tim2 jest to 86Mhz jest dzielona przez TIM_ClockDivision, następnie przez Prescaler, a potem dobiera się okres sygnału czyli TIM_Period.
Ale z tego nic mi nie wychodzi mądrego.
Druga podpowiedź to że częstotliwość generowanego sygnału, to wynik częstotliwości zegara podzielonej przez iloczyn Prescalera i Period.
Ta opcja wydaje się bardziej prawdopodobna, ponieważ w przeciwieństwie do pierwszego przypadku uzyskuję coś zbliżonego do mojego wyniku. Sprawdzam to na programie zapalającym diodę i staram się uzyskać 1 Hz. W przypadku drugiej metody dobierając Prescaler = 40000 i Period 500 uzyskuję z obliczeń uzyskuję 2,15 Hz a z obserwacji coś około 0,8 Hz.
Pierwszą metodę sprawdzałem też na oscyloskopie i wyniki w ogóle się nie pokrywały.
Kod do sprawdzania.
Kod: C / C++
Będę wdzięczny jeżeli ktoś wskaże mi miejsce w którym robię błąd.
Pozdrawiam