'
max2620是个好的方案,也可以用mb1504,到几百m没问题。考虑到用芯片,是应为芯片设计可能会方便些,整机的电路设计会简单些。
呵呵,现在看来是把原设计推翻了重新作了,我多虑了:)
'
恩,1504用起来也很方便的,我用过报废对讲机上拆的1504.手头刚好有现成的adf4106就直接用4106了. 2620做vco的确蛮方便的.顺便上个51控制1504的代码~改改就能用别的单片机.
/************pll_mb1504**************/
/**********huang chunliang***********/
/*********editied by yuxuan**********/
/*************2006.9.17**************/
#include "reg51.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define nop _nop_();
sbit mb1504_clk=p1^0; //1504clock
sbit mb1504_data=p1^1; //1504data
sbit mb1504_le = p1^2; //1504lock
uchar divider;
uint data1504;
ulong fredata,swalldata,setdata;
/**********************************/
//set ref fre
//ref osc=12mhz
//ref fre=10khz
/**********************************/
void reffreq(uint ref,bit divider)
{
uchar i;
mb1504_le=0;
if(divider==0)
mb1504_data=0;
else
mb1504_data=1;
mb1504_clk=0;
nop;
mb1504_clk=1;
nop;
nop;
nop;
nop;
nop;
mb1504_clk=0;
mb1504_clk=0;
i=14;
while(i--)
{ nop;
mb1504_data = ref & 0x2000;
nop;
mb1504_clk= 0;
nop;
mb1504_clk = 1;
nop;
ref = ref<<1 ;
mb1504_clk=0;
}
mb1504_clk=0;
mb1504_data =1;
nop;
mb1504_clk=1;
nop;
nop;
nop;
nop;
mb1504_clk=0;
mb1504_data =0;
mb1504_le=1;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
mb1504_le=0;
}
/**********************************/
//set frequence
/**********************************/
void setfre(uint progfre,uchar swallfre)//
{ uchar i;
mb1504_le=0;
i=11;
mb1504_clk=0;
while(i--)
{
mb1504_data = progfre & 0x400;
nop;
mb1504_clk= 0;
nop;
mb1504_clk = 1;
nop;
progfre= progfre<<1;
mb1504_clk=0;
}
i=7;
while(i--)
{
mb1504_clk=0;
mb1504_data = swallfre & 0x40;
nop;
mb1504_clk= 0;
nop;
mb1504_clk = 1;
nop;
nop;
swallfre= swallfre<<1 ;
mb1504_clk=0;
mb1504_clk=0;
}
mb1504_data =0;
nop;
mb1504_clk=0;
nop;
mb1504_clk=1;
nop;
nop;
nop;
nop;
nop;
mb1504_clk=0;
mb1504_data =0;
mb1504_le=1;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
mb1504_le=0;
}
/******************************/
//main
/******************************/
main()
{
mb1504_le=0;
mb1504_clk=0;
mb1504_data =0;
fredata=101230;
data1504=fredata/10;
setdata=data1504/32; //n
swalldata=data1504%32;//a
reffreq(1200,1); //ref freq 10khz
setfre(setdata,swalldata);
while(1);
}