这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » DCO 请教关于DCO频率调整的问题!

共2条 1/1 1 跳转至

DCO 请教关于DCO频率调整的问题!

院士
2006-09-17 18:14:16     打赏
DCO 请教关于DCO频率调整的问题!



关键词: 请教     关于     频率     调整     问题    

院士
2006-12-22 22:43:00     打赏
2楼
问 我准备用DCO来做红外发射频率的软件调制,但DCO会随温度和电压的变化有所变化,有没有哪位给小弟有关DCO调整的代码!谢谢! 1: TI网站有软件调整DCO的例程,汇编和C代码都有. 2: 如果我需要通过DCO调制38KHZ信号,,,能不能很稳定呀!!


DCO频率的上下浮动是多少? 3: 根据国家有关规约,38K±1K就可以了,再说红外接收端的接收管±10K问题也不是太大.当然做的时候还是要保证在规定的范围里啦.用DCO没问题,也可以用高速晶振.都可以的. 4: 在TI上资料上找到了,,小弟找了半天也没有找到例程。。。

哪位大哥再帮小弟贴下例程。。。三克油!! 5: //******************************************************************************
// MSP-FET430x110 Demo - Implement Auto RSEL SW FLL
//
// Description; Set DCO clock to (Delta)*(4096) using software FLL. DCO clock
// is output on P1.4 as SMCLK. DCO clock, which is the selected SMCLK source
// for timer_A is integrated over LFXT1/8 (4096) until SMCLK is is equal
// to Delta. CCR2 captures ACLK. To use Set_DCO Timer_A must be
// operating in continous mode. Watch crystal for ACLK is required for
// this example. Delta must be kept in a range that allows possible
// DCO speeds. Minimum Delta must be 64 or greater to ensure Set_DCO loop
// CAN complete within capture interval. Maximum delta CAN be calculated be
// f(DCOx7) / 4096. f(DCOx7) CAN be found in device specific datasheet.
// ACLK = LFXT1/8 = 32768/8, MCLK = SMCLK = target DCO
// //*External watch crystal installed on XIN XOUT is required for ACLK*//
//
// MSP430F1121
// ---------------
// /|\| XIN|-
// | | | 32kHz
// --|RST XOUT|-
// | |
// | P1.4|--> SMLCK = target DCO
//
//
// M.Buccini
// Texas Instruments, Inc
// January 2002
// Built with IAR Embedded Workbench Version: 1.25A
//******************************************************************************

#include <MSP430x11x1.h>

//#define DELTA 900 // target DCO = DELTA*(4096) = 3686400
#define DELTA 250 // target DCO = DELTA*(4096) = 1024000
//#define DELTA 64 // target DCO = DELTA*(4096) = 262144

void Set_DCO (void);

void main(void)
{
unsigned int i;

WDTCTL = WDTPW + WDTHOLD; // Stop WDT
BCSCTL1 |= DIVA1 + DIVA0; // ACLK = LFXT1CLK/8
P1DIR |= 0x10; // P1.4 output
P1SEL |= 0x10; // P1.4 SMCLK output
for (i = 0xFFFF; i > 0; i--); // Delay for XTAL to settle
Set_DCO(); // Set DCO

while (1);
}

void Set_DCO (void) // Subroutine to set DCO to selected frequency
{
unsigned int Compare, Oldcapture = 0;

CCTL2 = CCIS0 + CM0 + CAP; // Define CCR2, CAP, ACLK
TACTL = TASSEL1 + TACLR + MC1; // SMCLK, continous mode
while (1)
{
while ((CCTL2 & CCIFG) != CCIFG); // Wait until capture occured!
CCTL2 &= ~CCIFG; // Capture occured, clear flag
Compare = CCR2; // Get current captured SMCLK
Compare = Compare - Oldcapture; // SMCLK difference
Oldcapture = CCR2; // Save current captured SMCLK
if (DELTA == Compare)
{
break; // if equal, leave "while(1)"
}
else if (DELTA < Compare) // DCO is too fast, slow it down
{
DCOCTL--;
if (DCOCTL == 0xFF) // Did DCO role under?
{
BCSCTL1--; // Select next lower RSEL
}
}
else
{
DCOCTL++;
if (DCOCTL == 0x00) // Did DCO role over?
{
BCSCTL1++; // Select next higher RSEL
}
}
}
CCTL2 = 0; // Stop CCR2 function
TACTL = 0; // Stop Timer_A
} 6: DCO的频率是稳定了,,,但大侠能不能给出个主意,,,我想输出38KHz的调制信号,该怎么办呢?小弟没想出来! 7: 一般程序用TA定时器就已经足够了,剩下来的TB用来产生38K的调制信号啊,呵呵! 8: 谢谢老兄,我现在用的型号上没有TB,,呵呵

我还想具体的问一下,如果外部接32.768Khz的晶振,内部要用DCO,,怎么产生

调制比较稳定的38Khz的信号! 9: 还要照顾到其他地方要使用CPU资源,这样做起来估计有困难.建议你试试将32768Hz的晶振直接换成38K的晶振试试,这样调制信号有了,TA的低频时钟信号也有了,还不用软件调整DCO了. 10: 好象比较难办啊!老兄这么节约成本啊!用外部RC或38K晶振很好搞定的,我同事做过 11: 老兄在线呢!

呵呵其实除了调制38Khz的信号外,几乎CPU没有什么其它的工作了,,也就是点

控制部分,,呵呵,,我还想问你一下,,有没有38Khz的晶振,,红外线发射

的频率要求是不是不那么严格,, 12: 我们这边买38Khz的晶振有点困难!!!

所以有没有办法用DCO调制38Khz的信号!谢谢

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]