Pa vidi ovako, glavna stvar sa tim Si5351 je racun za frekvenciju. Prilicno je zaludan taj algoritam, ne moze jednostavno da mu se kaze npr "generisi 14.8MHz", nego mora da se uradi ta racionalna aproksimacija jer tehnicki mora da posaljes "razlomak" koji si izracunao.
Pisao sam detaljnije na mom blogu oko toga ali evo ukratko, od 27MHz (to je kristal) se to prvo interno u IC dize na nekih 800-900MHz i onda se ta ucestanost deli da bi dobio izlaznu frekvenciju. Npr, digao sam prvo na 810MHz i da bi dobio na izlazu 14.8MHz (to je 3.7MHz za SDR) moram da ovih 810MHz (ili koliko god sam izabrao, vezano je za jitter) podelim "tacno" sa 54.729729 :)
Si zahteva da mu se upise ekivalent ovog decimalnog broja ali samo kao celobrojne vrednosti, ima 3 neke velicine, A, B, C, gde je recimo A=54, B=1, C=729729 (A+B/C).
E sad to u nekim situacijama izgleda prosto ali se sve drasticno pogorsava ako sam hteo da mi izlazna frekvencija bude npr 14.800004MHz, onda bih morao da radim deljenje sa 54.7297149379149 :)
Taj broj je "blagi uzas" za sicusni mikrokontroler a Si ni u ludilu to ne moze da prihvati u obliku A+B/C.
Da bi ipak mogli da upisemo ovakav decimalni broj, radi se ta racionalna aproksimacija koja trazi koje to dve celobrojne vrednosti (B i C) mogu najpribliznije da naprave rezultat 0.7297149379149 i od tacnosti tog racuna prakticno dobijamo tacnost izlazne frekvencije.
Si5351 je po tom pitanju "neogranicene rezolucije", kako uradis racun tako ce i on da generise izlaznu frekvenciju, nema "korake" kao vecina klasicnih PLL-ova.
I za PC racunar ovaj racun nije ni malo naivan, to zahteva bar 32bitnu ili 64bitnu floating-point matematiku! Jos jedna otezavajacua okolnost je ta sto rezultat ne moze da se obije "odjenom" preko neke formule nego mora da se radi iteracija (ponavljanje u petlji) i sa svakim novim prolazom u petlji se "priblizava" zeljenom rezultatu (to je aproksimacija).
Ovaj racun, sto je
srz cele problematike, sam postavio na mom blogu i predvidjen je za kompajliranje sa GNU C/C++. Ako znas sta je GNU C/C++ onda takodje znas da to nema nikakve veze sto sam ja to radio na OS X, to se bez izmena kompajlira na svim drugim platformama (nisam postavio "make" fajlove, ko je iole strucan oko toga zna sta je to i kako da ih napise)!
Uzgred Mac OS X je baziran na UNIX platformi sto je "tata" od LINUX-a pa je samim tim sve to "vrlo" kompatibilno.
Sto se tice samog mikrokontrolera koji sam upotrebio PIC16F1455, on je isprogramiran tako da se "predstavi" kao standardni HID seriski uredjaj i u tom smislu mu
nije potreban sistemski drajver za rad. Cak sam "protokol" napravio tako da mozes iz bilo kog terminal programa da saljes komande i da primas odgovor od kontrolera, ponasa se kao nekakav
modem. Dakle to moze da se zakaci na bilo koji racuna i ako znas sta trebas da ukucas (slicno kao sa AT komandama za modem) mozes da setujes izlaznu frekvenciju.
Na ovaj nacin sam DRASTICNO uprostio stvar i olaksao buduce pisanje drajvera za neki specifican SDR software.
Za moj slucaj ja sam napravio onaj mali OS X upravljacki program koji povezuje DSP-Radio i salje te "modemske" komande ka Si5351.
U pregovorima sam sa nekim prijateljima da naprave i upravljacki program za SDR#.
Ko je voljan i strucan da napravi isto za npr GenesisRadio za Windows, rado cu podeliti tehnicku specifikaciju.
Sto se mene tice, ja sam vise nego dovoljno truda i vremena odvojio (i sve to javno "podelio") u savladavnju te problematike oko Si5351 koji je fenomenalan clock-generator, nebitno za SDR, to je primenljivo na X nekih drugi stvari i uredjaja.
Najlakse je "uzmi kristal iz furde", niko (cast izuzecima) nece da sedne i da zagreje malo stolicu i nesto korisno-napredno uradi za ovo drustvo …
[Ovu poruku je menjao mikikg dana 27.04.2014. u 11:35 GMT+1]