timer - jak wygenerowac dowolna czestotliwosc

Aug 28, 2003 2 Replies

Pytanie troche teoretyczne



Mam do dyspozycji 8 bitowy timer/licznik (w zasadzie az 4 niezalezne) ktory dziala tak ze zlicza od ustawionej wartosci do zera i przy dojsciu do zera generuje impuls/przerwanie



f przebiegu zegarowego 250000 Hz a chce za pomoca tego generowac czestotliwosci w zakresie 8 do 700 Hz i nie mam pojecia jak to ugryzc



TB



1 licznik 8 bit 255 imp 250 000 / 255 = 980.39216 przekrecen czyli f min ze sretowanego pinu to wyjdzie 490.19608hz ( przekrecenie licznika "1" przekrecenie ponowne "0" ale jak 1 licznikiem zaczniesz sterowaæ drugi to masz 16 bitów i 250 000 / 65535 = 3.8147555 przekreceñ czyli f min to 1.9073778 hz - czyli z f = 250 000hz i licznik 16 bit(dwa liczniki po 8 bit) da sie bez problemu wykonac generator który bedzie dzialal w zakresie tym co podale¶ :)))

sposób liczenia podany - kwesta odpowiedniego ustawienie wpisów do liczników aby odliczlay zadany czas miedzy impulsami jak pokombinujesz to jeszcze bedzie mozna odpowiednio pobawiæ sie wype³nieniem (np "1" d³uzsza a "0" krótsze lub na odwrót)

ps... domniewam ze chcesz osiagn±æ na wyjsciu sygnal prostok±tny

U¿ytkownik "Tomasz Bednarz" snipped-for-privacy@internet.pl napisa³ w wiadomo¶ci news:bilski$n44$ snipped-for-privacy@portraits.wsisiz.edu.pl

Jak rozumiem nie masz dodatkowego wsparcia sprzêtowego jak np. rejestr "Compare" ? W takim razie pozostaje Ci zliczanie przerwañ na piechotê i programowa zmiana stanu bitu wyjsciowego co pó³okres przebiegu wyjsciowego, czyli T_pó³ = 714us (700Hz) ... 62.5ms (8Hz)

Taktowanie 8 bitowego licznika f_cnt=250kHz daje Ci mo¿liwo¶æ wygenerowania przerwania co

4us (N=1) ... 1.02ms (N=255) ... ew. 1.024ms (N=256=0) z interwa³em 4us. Po przyjêciu przerwania musisz prze³adowaæ licznik now± warto¶ci± N _jednocze¶nie uwzglêdniaj±c_ to co licznik zd±¿y³ naliczyæ od momentu przepe³nienia i wygenerowania przerwania do chwili jego obs³ugi. Czyli w praktyce dodaj±c N do bie¿±cej warto¶ci licznika (mod 256). BTW: Licznik zlicza w dó³ a nie w górê - jak w '51 ?

Z tym, ¿e przyjêcie i obs³uga przerwania wymaga czasu a licznik liczy non-stop. Je¿eli te 250kHz jest jednocze¶nie zegarem CPU to pewnie nie da siê prze³adowaæ mniej ni¿ N=kilkadziesi±t, bez gubienia przerwañ. W obs³udze zliczasz przerwania mod M i co M-ty raz robisz co¶ po¿ytecznego (np. zmiana stanu bitu wyjsciowego). W ten sposób bêdziesz w stanie wygenerowaæ przebieg o pó³okresie:

T_pó³ = M * N * 4us. Czyli np. M=1, N=178 -> T_pó³ = 712us -> T=1.424ms -> f~=702Hz M= 62, N=252 -> T_pó³ = 62.496ms -> T= 0.12499s -> f~=8Hz

Czy o to chodzi³o?

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required