共2条
1/1 1 跳转至页
DCO 请教关于DCO频率调整的问题!

问
我准备用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的信号!谢谢
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 跳转至页
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
汽车+汽车电子电阻解释与分析被打赏5分 | |
分享汽车通信和多媒体总线结构被打赏20分 | |
【我踩过的那些坑】结构堵孔导致的喇叭无声问题被打赏50分 | |
NUCLEO-U083RC学习历程38+串口通过队列的方式输出两个字符串被打赏20分 | |
【我踩过的那些坑】分享一下调试一款AD芯片的遇到的“坑”被打赏50分 | |
电流检测模块MAX4080S被打赏10分 | |
【我踩过的那些坑】calloc和malloc错误使用导致跑飞问题排查被打赏50分 | |
分享电控悬架的结构与工作原理(一)被打赏20分 | |
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 |