Generator trzech częstotliwości

Sep 23, 2004 6 Replies

Mam duży(przynajmniej dla mnie) problem. Powiedzmy że muszę wygenerować trzy częstotliwości za pomocą jednego uC(najlepiej AVR). Pierwsza częstotliwość to 40kHz, druga to 60kHz a trzecia 1,2MHz. Szukałem w necie ale znalazłem tylko dds`y - np. minidds. Ale to jest tylko jedna częstotliwość. W sumie to poradziłbym sobie z tym gdyby nie ta częstotl.



1,2MHz. Jeśli ktoś ma jakiś pomysł to chętnie poczytam - może jakieś przykłady(najlepiej w c lub c + asm). Z góry dzieki za info.

Użytkownik "loko83" snipped-for-privacy@tlen.pl napisał w wiadomości news:civ2l8$6rj$ snipped-for-privacy@atlantis.news.tpi.pl

Czy dokladnie 1.2MHz? Czy dokładnie 40kHz i 60kHz? Tzn. czy można je uzyskać z prostego podziału zegara, czy musi byćDDS? Prostokąt czy sinus? Za mało podałeś szczegółów, więc to co poniżej to tylko garść luźnych skojarzeń:

Co do 1.2MHz: Wziąć 2313, pogonić z overclockiem na kwarcu 12MHz. (AFAIR w Tiny2313 to już 12MHz da się nawet przyłożyć legalnie). 1.2MHz wygenerujesz sprzętowo z podziału f_clk/10. Czyli rejestr "compare" ustawić na 5 a wy OC1 w trybie "toggle".

Częstotliwości zbliżone 40 i 60kHz możesz wygenerować w zmodyfikowanym układzie miniDDS. Oczywiście o ile nie da się tego sensowniej zrobić przez podział na licznikach. Jedna pętla w oryginalnym miniDDS zajmuje 9cykli co przy 12MHz dałoby takt DDS-a równy 1.33MHz . Nawet jeżeli wydłużysz tą pętlę

5-krotnie - do 45 cykli to jeszcze masz takt 266kHz czyli ponad dwie oktawy powyżej max. częstotliwości wyjściowej DDS-a (60kHz). A w 45 cyklach wyrobisz się z równoległą akumulacją fazy w dwóch akumulatorach i wystawieniem bajtu fazy na port przetwornika. Gorzej, że w 2313 brakuje drugiego portu równoległego na drugą drabinkę R2R a wystawianie na zewn. rejestr będzie kłopotliwe. Może coś ciut większego? Jakieś AtMega8?

loko83 snipped-for-privacy@tlen.pl napisał(a):

Witam. A czy ten procek miałby jeszcze coś do roboty ? Bo jeśli tylko generowanie tych 3-ch częstotliwości to ... i tak potrzebny Ci naprawdę szybki procek :( Ale jest to do zrobienia :)

Pzdr. Piotrek Sz.

Użytkownik Marek Dzwonnik napisał:

Procesor nie będzie wykonywał innych czynności. Wiem, że dodatkowa modulacja(PWM) spwoduje, że nie będzie możliwe generowanie trzech częstotl. Z tego względu wyjściowe szpilki będę sobie formował poza uC. Procesor - najlepiej aby nie był zbyt duży(coś w rodzaju at tiny w obudowie dip8). Może na jakiś inny procek. Może PIC16F84 poradziłby sobie z tym zadaniem(nie potrafie znaleźć w nocie jaki ma podział ale coś mi się wydaje że jeden cykl przy 4MHz to 1us). Dokładne częstotliwości to 38kHz, 57kHz, 1.1875MHz.

Użytkownik "loko83" snipped-for-privacy@tlen.pl napisał w wiadomości news:civ8jm$mui$ snipped-for-privacy@nemesis.news.tpi.pl

Tak. PICe dzielą przez 4. AVR przy 4MHz ma cykl maszynowy 250ns.

Co to będzie? Kojarzy mi się z jakimiś podnośnymi, ale nie wiem od czego? ;-)

Hmmm... Wspólne wielokrotności niby proste, ale nie całkiem i nie do końca. Całkowite wsp. podziału (375, 250, 12) wychodzą dopiero przy 14.25MHz. Skąd wytrzasnąć taki kwarc? Programowalny generator Epsona?

A może na miniDDS wygenerować 38kHz i 57kHz a potem mając 38kHz jako f odniesienia, powielić na PLLu razy 125 do 4.75MHz = 4x1.1875MHz ? Nawet HC4046 się tu wyrobi, ale niestety oznacza to kawałek dodatkowego układu.

BTW: Skracaj cytaty!

Czy ty budujesz może jakis koder stereo i RDS ? :P

pzdr,

Użytkownik "Marek Dzwonnik" <mdz@WIADOMO_PO_CO_TO.message.pl> napisał w wiadomości news:41532d15$ snipped-for-privacy@news.home.net.pl

I tak będzie chyba najłatwiej. Generator Epsona z serii SG-8002 (

formatting link
-> Search "SG-8002"

->

formatting link

->

formatting link
) zaprogramowany na 14.25MHz, poganiający jakiegoś AVR-a Na jednym timerze zrealizować podział /12 i uzyskać 1.187500MHz Na drugim timerze zrealizować podział /125 -> przerwania z częstotliwością 114kHz Mając przerwania 114kHz programowo dzielić /2 ( 57kHz ) oraz /3 (38kHz).

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required