GENERATOR - AVR

Aug 16, 2004 3 Replies

Czy ma kto¶ do¶wiadczenie w generowaniu impulsów na prockach AVR. Chcia³bym mieæ na wyj¶ciu Timera przebieg o f=2048000 Hz i wype³nieniu 50%. Jak powinien wygl±daæ program ?



Domy¶lam siê, ¿e powinienem ustawiæ Timer1 tak, aby wytwarza³ tak± czêstotliwo¶æ, aby w trybie PWM impulsy pojawia³y siê okre¶lon± ilo¶c razy, ale nie wiem paru spraw:



Zak³adam, ¿e ATMEL AVR 90S8515 taktowany jest f=4 MHz. Teraz patrze w ustawienia Timera1 i mam, ¿e mogê go taktowaæ: f, f/8, f/64, f/256 i f/1024. Licznik jest 8 bitowy wiêc wykona 256 cykli wiêc 256 * (4000000 Hz / 1024) = 1000000 Hz - to jest czêstotliwo¶æ timera PWM a ja potrzebujê 2048000 Hz.



Ni mam pomys³ów., Mo¿eciemi pomóc? A.


Mo¿e tak:

kwarc: f = 3,27680 MHz

wówczas:

Czêstotliwo¶æ taktowania Timer1 by³aby:

f1 = f / 256 = 3276800 Hz / 256 = 12800 Hz

Licznik Timer1 zlicza³by w przód od 0 do 256, wiêc pytanie, od ilu liczyæ , aby przepe³nienie pojawi³o siê w odpowiednim momencie, czyli:

x * 12800 Hz = 2048000 / 12800 x = 160

256 - 160 = 96

czyli od 96 w górê przepe³nienie pojawia³o by siê tak, aby F koñowe by³o

2048000 Hz,

pytanie tylko, gdzie w AVR jest (je¿eli w ogóle) mozliwo¶æ ustawiania warto¶ci rejestru licznika po przepe³nieniu. Czy specjalnie mam generowaæ przerwanie i w przerwaniu ustawiaæ tê warto¶æ?

Czyli algorytm by³by taki:

  1. wstaw warto¶æ 96 do rejestru licznika
  2. start licznika
  3. po przepe³nieniu w przerwaniu ustaw stan licznika na 96
  4. opó¶æ przerwanie

Ok, ale to dopiero czêstotliwo¶æ taktowania licznika, a jak do tego ma siê PWM ? Tam s± inne wspó³czynniki. Z tego co wiem podstaw± do generatora s±:

czêstotliwo¶c Timera1 / 510 lub czêstotliwo¶c Timera1 / 1022 lub czêstotliwo¶c Timera1 / 2046

czyli o takie dzielniki powinienem skorygowaæ czêstotliwo¶c takotowania Timera1, ale te liczby s± dziwne. Bo jest zamiast 512 jest 510 itd. Nigdy nie dojde chyba do idealnej czêstotliwo¶ci.

Czy dobrze kombinujê ? A.

Witam. Trochê pokie³basi³e¶, wiêc opiszê wszystko od pocz±tku. Timer1 mo¿e byæ taktowany z nastêpuj±cymi czêstotliwo¶ciami: CK, CK/8, CK/64, CK/256, CK/1024, gdzie CK-czêstotliwo¶æ zegara (wyboru dokonuje sie poprzez odpowiednie ustawienie bitów CS12, CS11 i CS10 w rejestrze TCCR1B). Timer1 mo¿e pracowaæ w 3 trybach PWM: 8, 9 i 10 bitowym (wyboru dokonuje siê poprzez odpowiednie ustawienie bitów PWM11 i PWM10 w rejestrze TCCR1A). Dla ka¿dego z trybów czêstotliwo¶æ sygna³u PWM wynosi odpowiednio: fTCK1/510, fTCK1/1022 i fTCK1/2046, gdzie fTCK1-czêstotliwo¶æ taktowania Timera1 (patrz na samej górze). Tak wiêc mo¿emy uzyskaæ tylko 15 ró¿nych czêstotliwo¶ci PWM. Najmniejsza wynosi CK/1024*2046, a najwiêksza CK/510. W trybie PWM licznik TCNT1 liczy w górê do 255, 511 lub 1023 (w zale¿no¶ci od wybranego trybu) i po osi±gniêciu tej warto¶ci liczy w dó³ do 0. Po osi±gniêciu 0 znów zaczyna liczyæ w gór± i tak dalej. Wype³nienie PWM ustawia siê poprzez odpowiednie ustawienie rejestru OCR1x. Stan portu OC1x jest zmieniany gdy TCNT1=OCR1x i zale¿y od tego czy TCNT1 w danej chwili liczy w górê czy w dó³, oraz od ustawieñ bitów COM1x1 i COM1x0 w rejestrze TCCR1A. 'x' oznacza tu wykorzystywany kana³ PWM (A lub B). Tak wiêc uzyskanie czêstotliwo¶ci 2048000Hz na AVR przy wykorzystaniu sprzêtowego PWM nie jest mo¿liwe. Jest to mo¿liwe w inny sposób, ale to zale¿y jeszcze od tego co ma poza tym robic system.

Pozdrawiam,

Piotrek.

U¿ytkownik "Adam" snipped-for-privacy@o2.pl napisa³ w wiadomo¶ci news:cfr2b4$hlq$ snipped-for-privacy@nemesis.news.tpi.pl...

System bêdzie bardzo zajêty, wiêc nie wiem, bo pewnie my¶lisz o zliczaniu i programowym wy³±czaniu i zapalaniu jakiego¶ bitu na porcie ? Np. w przerwaniu od mikrokontrolera ? Niestety to odpada, bo ta czêstotliwo¶c potrzebna mi jest do przetwornika AC i jak siê zmieni to równie¿ dane mi siê posypi± a to wp³ynie na jako¶æ pomiaru. Chcia³em zaoszczêdziæ i nie wstawiac do urz±dzenia dodatkowej kostki np.

555, ale widzê, ¿e utrzymanie sta³ej czêstotliwo¶ci dla AC przy jednoczesnym przetwarzaniu sygna³u, wy¶wietlaniu pomiarów itd. to jest za du¿o. Mo¿e siê mylê?

A.

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required