89C51 - generator

Mar 02, 2005 9 Replies

Ma kto¶ jaki¶ pomys³ jak generowaæ na 89C51 dwie czêstotliwo¶ci: 400Hz i



401Hz (naraz, tzn. na dwóch osobnych wyj¶ciach) z maksymalnie du¿± dok³adno¶ci±. Próbowa³em zrobiæ to na dwóch oddzielnych timerach, ale poniewa¿ s± to prawie takie same czêstotliwo¶ci, to zawsze która¶ (o ni¿szym priorytecie) jest generowana z b³êdem, bo obs³uga timera o wy¿szym priorytecie zabiera czas procesora... Jak to inaczej zrobiæ?

Pzdr. K.



Mo¿e tak: Gdyby uda³o Ci siê wywo³ywaæ przerwanie co 1us to prawie jeste¶my w domu. W przerwaniu inkrementujesz dwa liczniki . Pierwszy licznik zlicza do 2500. W ten sposób przepe³nienie licznika nast±pi co 2,5ms czyli 400 razy/s. Drugi licznik zlicza do 2493 w tym przypadku przepe³nienie nast±pi 401,12 razy/s. ewentualnie zlicza do 2494 400,96 raza/s. Pozostaje jeszcze sprawa korekcji tych warto¶æ (na prze³adowanie liczników) itd. To tylko taka koncepcja .Je¶li co¶ pomyli³em to proszê o poprawki. Pzrd.JJMafia

Przy rezonatorze 12MHz maksymalnie mog± byæ przerwania co 1us. A to oznacza, ¿e ca³y czas procesora by³by zu¿yty na przerwania, zreszt± którego by siê nawet nie da³o obs³u¿yæ, bo 1 us trwa cykl maszynowy mikrokontrolera...

Pomys³ jest jak najbardziej, ale to wszystko dzieje siê zbyt szybko. Mo¿na trochê zwolniæ te przerwania (np. 16 razy), ale wówczas nie uzyska siê za³o¿onej du¿ej dok³adno¶ci...

Pzdr. K.

U¿ytkownik "Krzysztof" <krzysztof.gedroycWYTNIJ snipped-for-privacy@wp.pl napisa³ w wiadomo¶ci news:d04c2d$103$ snipped-for-privacy@nemesis.news.tpi.pl

Koniecznie na 89C51 ? Czy ten proc ma robiæ jeszcze co¶ innego?

Prawdopodobnie zmodyfikowa³bym miniDDSa Jespera Hansena. Uk³ad zbudowany na

2313 jest prosty jak budowa cepa:
formatting link
Orygina³ generuje jedn± czêstotliwo¶æ ale dla tak ma³ych f da siê go przebudowaæ, tak ¿eby synchronicznie liczyæ kilka kana³ów. W tej chwili takt DDSa (f_mclk = czêstotliwo¶æ inkrementacji akumulatora fazy) siêga 1.1MHz Na wyj¶ciu potrzebujesz ledwie 400Hz, wiêc f_mclk rzêdu 50KHz bêdzie z du¿ym zapasem (>100 próbek na okres). To Ci daje 200 cykli maszynowych na jeden okres f_mclk. W tym czasie musisz:

- inkrementowaæ dwa niezale¿ne 24-bitowe akumulatory fazy (jeden dla f1=400Hz, drugi dla f2=401Hz).

- pobraæ warto¶ci cos(fi) z tablicy

- wystawiæ je na dwa przetworniki A/C. W jednokana³owym znajduje siê prosty 8-bitowy DAC w postaci drabinki R-2R zapiêtej bezpo¶rednio na wyj¶ciach portu. Ale w tym tempie da siê wystawiæ warto¶ci szeregowo choæby na dwie sztuki HC595 lub jakie¶ szeregowe DAC-e.

Dalej dwa filtry d.p. (lub pasmowe na 400Hz) na op-ampach i dostajesz na wyj¶ciu dwa przebiegi sinus o dok³adnie okre¶lonych warto¶ciach ¶rednich (400 i 401Hz z dok³adno¶ci± do u³amka Hz). Czysto¶æ widmowa zale¿y od paru czynników. Ogólnie nie bêdzie rewelacyjna (krótkie s³owo adresuj±ce LUT cos(fi), krótkie s³owo przetwornika ADC), ale bodaj¿e(!) w tym uk³adzie odstêp g³ownego pr±¿ka od zak³óceñ i tak wychodzi nie mniejszy ni¿ 30dB.

Niestety tak.

Obs³ugiwaæ jeszcze trzy guziki, które odpowienio umo¿liwiaj± lekkie zmiany tych czêstotliwo¶ci. Zatem nie jest to du¿o, ale jeszcze pewn± rolê odgrywa pobór pr±du, zatem wszystko musi byæ na przerwaniach, by w czasie gdy nie s± obs³ugiwane, mikrokontroler móg³ wchodziæ w tryb Idle.

Wielkie dziêki za szczegó³owy opis uk³adu opartego na 2313!

Pzdr. Krzysztof.

U¿ytkownik "Krzysztof" <krzysztof.gedroycWYTNIJ snipped-for-privacy@wp.pl napisa³ w wiadomo¶ci news:d04l79$ms3$ snipped-for-privacy@nemesis.news.tpi.pl

Je¶li chcia³by¶ bawiæ siê w rêczne rze¼bienie DDS-a, to polecam "DDS tutorial" ze strony Analoga:

formatting link

No wlasnie? :o)

IMHO przy tych czestotliwosciach warto liczyc sinus CORDICiem, to kilkanascie dodawan i shiftow, a dokladnosc tego sinusa mozna sobie wybrac dowolna, jaka jest potrzebna. Wylatuje przez to z ukladu duza LUT, a te kilka arcus tangensow mozna sobie na sztywno wpisac w kod.

CORDIC sobie z tym poradzi.

A z tym juz nie. :-) Poza tym SNR tez bedzie taki sobie -- drabinka R2R zbudowana z przypadkowych elementow rewelacji nie zapewni. :-(

Pozdrawiam Piotr Wyderski

Pytania podstawowe:

-co ma wyjsc - sinus, prostokat ?

-jakie "szumy fazowe" sa dopuszczalne ?

Bo jesli zbocza impulsow maja byc w pozycji mozliwie najdokladnieszej, to a) stosujemy dwa PLL, albo b) potrzebujemy zegara 400*401Hz=160400 Hz, lepiej 2x wiecej lub jego dowolna wielokrotnosc.

I nawet dds tu niewiele pomoze, chyba ze bedzie karmiony czestotliwoscia z b), albo wygeneruje sinusa, potem dobry filtr analogowy, komparator analogowy.

Moglby to nawet procek generowac: jedno przerwanie z w/w czestotliwoscia, w przerwaniu prowadzimy dwa liczniki do 400 i 401, ustawiamy odpowiednie bity. Tylko ze 89C51 raczej nie bedzie w stanie tego zrobic. Kwarc powiedzmy

23.0976MHz, cykl rozkazowy 1.9248MHz, zostanie 12cykli na przerwanie... no i na moj gust sporo zabraknie, bo arytmetyka jest w '51 mierna. Albo uzyj AVR, albo jakiegos innego klona '51 ktory nie wymaga 12 cykli zegara na rozkaz. A w ogole to czemu meczyc procka na cos co pare dzielnikow moze zrobic - pod warunkiem ze odpowiedni kwarc dostaniesz :-)

Jesli natomiast ta dokladnosc zboczy nie jest bardzo potrzebna .. to moze nawet nakladanie przerwan nie przeszkadza ?

J.

W moim pierwszym mailu napisa³em, ¿e uk³ad ma generowaæ dwie czêstotliwo¶ci, naraz, tzn. na dwóch osobnych wyj¶ciach. Choæ nie by³o to powiedziane wprost, to wiêkszo¶æ osób od razu pomy¶la³a, ¿e chodzi o przebiegi sinusoidalne. Ale przecie¿ na "go³ym" 89C51 nie da siê tego zrobiæ... Chodzi o przebiegi prostok±tne. Na dodatek czêstotliwo¶æ 401Hz jest sta³a, a t± ni¿sz± mo¿na ustawiaæ w zakresie powiedzmy 380 - 400 Hz. Zrobiæ dzia³aj±cy taki uk³ad "mniej wiêcej" jest ³atwo, ale przyda³oby siê by dok³adno¶æ by³a lepsza ni¿ 0,2 Hz.

Pzdr. Krzysztof.

bylo od tego zaczac.

Ale szumy fazowe jakie ? Bo wygenerowac przebieg ktory ma dokladnie 397 impulsow na sekunde, czy moze 397*60 imp/minute to jest jeden problem, a czy kolejne impulsy maja miec okres 2,5188916876574307304785894206549 ms to jest drugi problem. czy moze lepiej zeby okres impulsow byl zawsze rowny, a dokladnosc czestotliwosci to mniej istotna ?

J.

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required