论坛风格切换切换到宽版
  • 3155阅读
  • 6回复

PLL专帖.大家把自己知道的所有有关的资料都放上来. [复制链接]

上一主题 下一主题
离线xu.dajiang
 
发帖
198
只看楼主 倒序阅读 0楼 发表于: 2007-09-05
最近找了好多的关于pll的资料.都是元件的.没有找到关于单片机控制程序.我又不会编程(相信也有和我一样的朋友 ).借宝地发个小帖.望高手把手头有的资料都放上来.大家一起研究讨论.
小弟在此先谢谢.
离线BG7TBL
发帖
2965
只看该作者 1楼 发表于: 2007-09-05
fil1256mkii,i2c一体化高频控制程序
/***********************************************************************
;*
;* title: fil1256mkii,i2c一体化高频控制程序
;* version: 1.0
;* last updated: 2007-08-28
;* target: atmega8
;* file: main.c
;* author(s): bg7tbl
;* first data :2007-08-25
;*          
;*
;* description
;* fil1256mkii,i2c一体化高频控制程序

/**************************************************************************
;fi1256mk2高频头资料:
;   |------------------------------------------------------|
; ---|                                                   |
;|   |                                                   |
; ---|                                                   |
;   |                                                   |
;   |               fi1256mk2                         |
;   |                                                   |
;   |                                                   |
;   |------------------------------------------------------|
;       |   |   |   |   |       |   |   |   |   |
;       11 12 13 14 15       21 22 23 24 25
;       vt   | scl sdl as       空 6.5m av   | af
;           |                       |
;         调谐供电+5v                 中频供电+5v        
;vt:调谐电压输出
;scl:i2c时钟端
;sdl:i2c数据端
;as:地址选择,接不同电压,选择不同地址
;6.5m:6.5m中频输出
;av:视频输出
;af:音频输出
;
;频率范围:49.75---863.25(接收)
;采用芯片:混频:tda5736,频率合成:tsa5523,中放:tda9800
;带afc状态输出,
;输入采用三个场mos管调谐放大,一个ic负责本振和混频,频率切换由pll
;控制,pll步进:31.5k,50k,62.5k,内部含控制dc-dc信号输出,
;中频38.9m,图象34.47m,声音1 32.4m 声音2 32.16m
;采用高中频:低频段 49.75---170.00m
;   中频段 170.00---450.00m
;   高频段 450.00---863.25m
;adc字节读出状态(afc输出的频率偏差)
;         输入电压范围     偏差     读出数字
;         0.0--0.15v       -125k     00
;         0.15--0.3v       -62.5k     01
;         0.3--0.45v         0       02
;         0.45--0.6v       +62.5k     03
;         0.6--1.0v       +125k     04
;
;写模式
;       msb                 lsb
;       7   6   5   4   3   2   1 0 ack
;地址   1   1   0   0   0 ma1 ma0 0 ack
;分频器1 0 n14 n13 n12 n11 n10 n9 n8 ack
;分频器2 n7 n6 n5 n4 n3 n2 n1 n0 ack
;控制1   1 cp t2 t1 t0 rsa rsb os ack
;控制2   p7 p6 p5 p4 p3 p2 p1 p0 ack

;ma0,ma1地址选择,pll供电电压vs=+5v
; ma1 ma2 地址 pin15(as)电压
; 0   0   c0 0--0.1vs
; 0   1   c2 0.2--0.3vs
; 1   0   c4 0.4--0.6vs
; 1   1   c6 0.9--1vs
;如果as空,自动选择c2

;n14--n0:内部可编程分频器

;控制字节
;cp:泵电源选择 1 快速调谐(泵电流250ua) 0 慢速调谐(泵电流50ua)
;t1=t2=0,t0=1:正常模式
;os泵电源输出控制 0 正常模式 1 输出为高阻,同时升压停止,无调谐电压,可外部调节
;rsa,rsb步进频率选择
; rsa rsb 步进
; x   0 50k
; 0   1 31.25k(慢速扫描)
; 1   1 62.5k(正常扫描)

;波段切换
;     p7 p6 p5 p4 p3 p2 p1 p0
;低频段 1 0 1 0 x 0 0 0   0xa0
;中频段 1 0 0 1 x 0 0 0   0x90
;高频段 0 0 1 1 x 0 0 0   0x30

;写入的次序(写模式):
;1,开始--地址--ack--分频器1--ack--分频器2--ack--控制1--ack--控制2--ack--停止
;2,开始--地址--ack--控制1--ack--控制2--ack--分频器1--ack--分频器2--ack--停止
;3,开始--地址--ack--分频器1--ack--分频器2--ack--控制1--ack--停止
;4,开始--地址--ack--分频器1--ack--分频器2--ack--停止

;建议写入次序:
;输入频率高与当前频率:采用1
;输入频率低于当前频率:采用2

;读模式
; 7(msb) 6 5 4 3 2 1 0 ack
;地址 1 1 0 0 0 ma1 ma0 1 ack   如果as悬空,地址=0xc3
;状态 por fl i2 i1 i0 a2 a1 a0 ack

;por=power on reset 当供电电压低于3v时=1;最后一个数据输入pll后为0
;fl   =1 锁定,至少需要8个监相周期才能锁定   =0 失锁
;i2--i0 对应于p2--p0口的状态
;a2--a0 afc状态

;建议读模式:
;1,开始--地址--ack--状态--ack--状态--   --

*********************************************************************************/


/*i/o口模拟i2c*/

#define sda 4
#define scl 5
#define i2c_ddr ddrc
#define i2c_pin pinc
#define i2c_port portc

#define sda_input   i2c_ddr &= ~(1<<sda)
#define sda_output i2c_ddr |= (1<<sda)
#define scl_input   i2c_ddr &= ~(1<<scl)
#define scl_output i2c_ddr |= (1<<scl)

#define sda_port_clr   i2c_port &= ~(1<<sda)
#define sda_port_set   i2c_port |= (1<<sda)
#define scl_port_clr   i2c_port &= ~(1<<scl)
#define scl_port_set   i2c_port |= (1<<scl)

#define sda_free   sda_input
#define scl_free   scl_input
#define sda_clr   sda_output
#define scl_clr   scl_output

#define sda_status i2c_pin &= (1<<sda)
void delay_long(unsigned long aa)
{
  while(aa--);
}
//*****************************************************
//delay 100us
//*****************************************************
void i2c_delay(void)
{
delay_long(10);
}

//*****************************************************
//i2c init
//*****************************************************
void i2c_init(void)
{
sda_input;
scl_input;
sda_port_clr;
scl_port_clr;
}

//*****************************************************
//i2c start
//*****************************************************
void i2c_start(void)
{
sda_free;
i2c_delay();
sda_clr;
i2c_delay();
scl_clr;
i2c_delay();
}

//*****************************************************
//i2c stop
//*****************************************************
void i2c_stop(void)
{
sda_clr;
i2c_delay();
scl_free;
i2c_delay();
sda_free;
i2c_delay();
}

//*****************************************************
//i2c_write
//*****************************************************
unsigned char i2c_write(unsigned char wb)
{
unsigned char i,ack=0;

for(i=0;i<8;i++)
{
  if( wb&0x80 )
    sda_free;
  else
    sda_clr;
  wb=wb<<1;
  i2c_delay();
  scl_free;
  i2c_delay();
  scl_clr;
  if(i!=7)
    i2c_delay();
}
sda_free; //release sda line
i2c_delay();
scl_free;
i2c_delay();
if( sda_status )
  ack=1; //ack error
scl_clr;
i2c_delay();

return ack;
}

//*****************************************************
//i2c_read
//原型:unsigned char i2c_read(unsigned char bend)
//输入:unsigned char ben=1,最后字节,=0,后面还有数据
//*****************************************************
unsigned char i2c_read(unsigned char bend)
{
unsigned char i,mb;

sda_free; //release sda line
mb=0;
for(i=0;i<8;i++)
{
  mb=mb<<1;
  i2c_delay();
  scl_free;
  i2c_delay();
  if(sda_status)
    mb++;
  i2c_delay();
  scl_clr;
  if(i!=7)
      i2c_delay();
}
//sda_free;
if( bend )
  sda_free; //end read noack
else
  sda_clr; //ack
i2c_delay();
scl_free;
i2c_delay();
scl_clr;
i2c_delay();
sda_free;

return mb;
}
/***************************************************************************
;*
;* function
;*   将数据发送到fil1256
;*
;* description
;*     输入频率单位为1hz
;*     通过i2c输出到fil1256
;***************************************************************************/
/*
;写入的次序(写模式):
;1,开始--地址--ack--分频器1--ack--分频器2--ack--控制1--ack--控制2--ack--停止
;2,开始--地址--ack--控制1--ack--控制2--ack--分频器1--ack--分频器2--ack--停止
;3,开始--地址--ack--分频器1--ack--分频器2--ack--控制1--ack--停止
;4,开始--地址--ack--分频器1--ack--分频器2--ack--停止
*/
void send_1256(unsigned long dat_fre1) //send data to 1256
{
  unsigned long dat_1256=0;
  unsigned char send_c1=0,send_c2=0;
 
  unsigned char send_n_h=0,send_n_l=0;
  unsigned char tmp=0;
 
  //发送数据到fil1256 i2c总线
  send_c2=0x30;         //高频段
  if(dat_fre1<49000000)
  {
  send_c2=0x90;         //选择中频率段
  }
  if(dat_fre1<20000000)
  {
  send_c2=0xa0;         //低频段
  }
 
  dat_1256=dat_fre1;     //将频率转换为hz
  dat_1256=dat_1256/6250;   //除以步进
  dat_1256=dat_1256/8;     //除以前置分频器
  send_n_l=dat_1256&0xff;
  send_n_h=(dat_1256>>8)&0xff;
  send_c1=0x88;
  //send_c1=0x89;         //禁止内部pll工作,
 
  i2c_start();
  i2c_write(0xc2);
  i2c_write(send_c1);
  i2c_write(send_c2);
  i2c_write(send_n_h);
  i2c_write(send_n_l);
  i2c_stop();
}
/**************************************/
离线xu.dajiang
发帖
198
只看该作者 2楼 发表于: 2007-09-05
谢谢楼上的朋友.你说的这个东西我有.是电脑看电视的卡.很好的资料.你用的什么控制的.
离线xu.dajiang
发帖
198
只看该作者 3楼 发表于: 2007-09-05
我手头有的一点东西.先发上来.不过不会用.只有元件的资料,大家有的话都用什么单片机控制的.有原程序和烧写文件最好.有原理图那就最好不过了.
lc7215.
mb15u10
mb1504
mb1511
mc145162
mc145170
本主题包含附件,请 登录 后查看, 或者 注册 成为会员
离线BG7IBQ
发帖
21205
只看该作者 4楼 发表于: 2007-09-05
在google.com那里打上"pll" 哗,一大堆资料
离线xu.dajiang
发帖
198
只看该作者 5楼 发表于: 2007-09-06
顶 上去继续
离线BG7RMU
发帖
434
只看该作者 6楼 发表于: 2007-10-24
我也来顶!